Блок IF не работает если под ним есть другие блоки

Vik89

Client
Регистрация
05.11.2014
Сообщения
71
Благодарностей
14
Баллы
8
Zennoposter v 5.7.0.0
Windows 7

Ошибка - проект не может быть выполнен - переменная не инициализированна.
(переменная глобальная - и была удалена из списка переменных)
сам проект https://yadi.sk/d/K8tuMUHBdjw9y



Скрин об ошибке

 
Последнее редактирование:

LmPopo

Client
Регистрация
06.12.2012
Сообщения
299
Благодарностей
136
Баллы
43
переменная не инициализированна
Переменная не создана, а совершается попытка увеличения счетчика.
 

Vik89

Client
Регистрация
05.11.2014
Сообщения
71
Благодарностей
14
Баллы
8
Последнее редактирование:

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113

Vik89

Client
Регистрация
05.11.2014
Сообщения
71
Благодарностей
14
Баллы
8
перед увеличением значения переменной она должна быть инициирована
Инициирование там предусмотрено логикой шаблона. Но кубик If не срабатывает! На скриншоте два примера - они различаются только соединением блоков. И логикой кубика If. В одном случае там != в другом == и стрелки соответственно по разному идут. Инициация переменной та же самая остается как в рабочем так и в нерабочем примере. Отсюда делаю вывод что это баг зенно
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Ну судя по скринам у вас логика неправильная. Вы по неуспеху ведете на увеличение значения переменной, а не на инициализацию.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
Ну судя по скринам у вас логика неправильная. Вы по неуспеху ведете на увеличение значения переменной, а не на инициализацию.
Почему же неправильная? Он проверяет если переменная пустая, то идти на её инициализацию, а в итоге шаблон идёт на увеличение этой переменной, т.е. не по тому выходу.
Проблема тут в том, что не инициализированная переменная не сравнивается в логике с пустотой, эта логика в любом случае выходит по неуспеху, хоть что там пропиши.
 
  • Спасибо
Реакции: black_pariah и Vik89

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Почему же неправильная? Он проверяет если переменная пустая, то идти на её инициализацию, а в итоге шаблон идёт на увеличение этой переменной, т.е. не по тому выходу.
Проблема тут в том, что не инициализированная переменная не сравнивается в логике с пустотой, эта логика в любом случае выходит по неуспеху, хоть что там пропиши.
Нет, он идет не на инициализацию, а на увелимчение. Смотрите скрин.

Так все пашет

 
Последнее редактирование модератором:

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
Нет, он идет не на инициализацию, а на увелимчение. Смотрите скрин.

Так все пашет

Я вижу что он указывает.
Еще раз:
Он проверяет в блоке ЕСЛИ переменная == пустоте, то логика по всем правилам должна идти в успешном направлении, т.е. на инициализацию переменной, но в данном случае, при сравнении с глобальной переменной, которой еще нет вообще этот блок не выдаёт, что пустота == пустоте, а при любом раскладе, хоть что вы туда напишите, этот блок пойдёт по неудачному выходу.

П.с. В Вашем случае уместно сравнение только 1 раз, т.е. когда счетчик запустился, тогда он идёт на увеличение, во всех других случаях он пойдёт на запуск. Так что это решение тоже не самое лучшее. Удобнее все же проверять на пустоту, а по факту сейчас приходится делать несколько проверок - 1. пусто\нет, 2. достигла ли переменная нужного значения.
 
  • Спасибо
Реакции: black_pariah

black_pariah

Client
Регистрация
08.09.2014
Сообщения
294
Благодарностей
90
Баллы
28
а может можно сразу обозначить глобальную переменную ,но установить ей значение пустоты и проверять в начале шаблона пустота или нет, если пустота ,то устанавливаем ноль,если нет ,то увеличиваем счётчик,так вроде бы получается,потому что если переменной нет ,то и пустоты в ней быть не может ,вот и идёт всё время по красному выходу.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
А если переменная уже есть что делать? Устанавливать ей пустоту? Потому то и говорю, что нужна сейчас двойная проверка.
 
  • Спасибо
Реакции: black_pariah

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
пустое значение переменной и необъявленная переменная это разные вещи.
проверять наличие переменной можно в коде http://zennolab.com/discussion/threads/mnogopotok-prostoj-primer.15888/page-2#post-97413
Так то оно понятно, что это разные вещи. В принципе логика работает правильно, хоть на первый взгляд и не логично :-)
Я к тому и писал, что по возможности, если это конечно вообще возможно, сделать, чтобы не объявленная переменная была равна пустоте, ведь по сути это так и есть. Переменной нет, а значит и данных в ней никаких нет.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)