Что нового

[Баг] Opt("MustDeclareVars") - Некорректная отмена опций

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Не уверен что бага, т.к опция специфическая, но в любом случае раньше так кажется небыло, да и поведение не особо ожидаемое.

Вот пример:

Код:
Dim $iOld_Opt = Opt("MustDeclareVars", 1)

Dim $var1 = 0

Opt("MustDeclareVars", $iOld_Opt)

$var2 = 0


Многим “писателям” UDF известно такое применение, когда для UDF нужно установить некоторые опций, но для самого скрипта, использующего эту UDF, эти опций нужно отменить. Так вот, тут такой трюк не проходит, известно что $iOld_Opt = 0, однако скрипт ругается на необъявленную переменную $var2, хотя если проверить Opt("MustDeclareVars"), то оно равняется 0 :scratch:, а значит опция всё таки отменена :wacko:

Что ещё более странное, так это если вместо $iOld_Opt подставить литеральное число (0), то скрипт больше не ругается.

Решение есть, заключается оно в простом подставлений Opt("MustDeclareVars", 0) перед Opt("MustDeclareVars", $iOld_Opt):

Код:
Opt("MustDeclareVars", 0)
Opt("MustDeclareVars", $iOld_Opt)


Но в любом случае, странно всё это...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
При запуске скрипта все OK. Ошибку фиксирует AutoIt3 Syntax Checker. Но это вполне логично, т.к. до запуска скрипта значение переменной $iOld_Opt неизвестно, и как следствие, AutoIt3 Syntax Checker ее просто не воспринимает. Если $iOld_Opt определить как константу, то ошибки не будет.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
у меня никто так и не ругнулся :smile:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Yashied [?]
это вполне логично, т.к. до запуска скрипта значение переменной $iOld_Opt неизвестно, и как следствие, AutoIt3 Syntax Checker ее просто не воспринимает.
А почему тогда с другими опциями нет подобной проблемы?
Да и следующий пример показывает что это не так:

Код:
Opt("MustDeclareVars", 1)

Dim $iOld_Opt = 0
Opt("MustDeclareVars", $iOld_Opt)

$var2 = 0


Если $iOld_Opt определить как константу, то ошибки не будет.
Ты это проверял? у меня ошибку по прежнему выдаёт.


Kaster [?]
у меня никто так и не ругнулся
Запусти из SciTE (F5).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
И вообще, мне кажется что эту опцию должны были сделать в виде деректив:

Код:
#StartMustDeclareVars

...

#EndMustDeclareVars
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
CreatoR сказал(а):
А почему тогда с другими опциями нет подобной проблемы?
С какими другими?

CreatoR сказал(а):
Запусти из SciTE (F5).
При нажатии F5, сначала запускается AU3Check, он и ругается. Ты попробуй через AutoIt3.exe, и все будет работать как надо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Yashied [?]
При нажатии F5, сначала запускается AU3Check
у меня просто рубордовская сборка скайта. я не сразу понял, что имеется в виду ошибка Au3Check.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Yashied [?]
С какими другими?
С любыми, например с "GUICloseOnESC".


При нажатии F5, сначала запускается AU3Check, он и ругается. Ты попробуй через AutoIt3.exe, и все будет работать как надо.
Я знаю что ошибка вызывается программой проверки синтаксиса, ведь эта опция для неё и предназначена :smile:
Но ведь речь не об этом...
 
Верх