Что нового

[Баг] Логические операторы в интерпритаторе

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Мелкая бага в интерпритаторе:

Код:
Number(1 Not = 0)


по логике вещей это возвращает 1 (при запуске скрипта), однако проверка синтаксиса указывает на ошибку, отсюда и предположение что бага в интерпритаторе, ну или это скрытая фича и такой синтаксис вполне приемлем, тогда Syntax Checker'у нужно указать на правильность данного синтаксиса :whistle:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Странно, но у меня всё нормально и с синтаксисом и по выполнению.
Код:
Number(1 Not = 0)

P.S. А в чём собственно баг? Autoit 3.3.4.0
 

Yashied

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

На мой взгляд это вообще неверная запись. Not относится к логическим операциям, а "=" к арифметическим. Тогда уж нужно записать так:

Код:
Number(Not (1 = 0))
 

SyDr

Сидра
Сообщения
651
Репутация
158
Разве могут идти два оператора подряд? Такого быть не должно. Операция Not неприменима к =

Однако сам код интерпретатором выполняется.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett сказал(а):
Странно, но у меня всё нормально и с синтаксисом и по выполнению.
Код:
Number(1 Not = 0)

P.S. А в чём собственно баг? Autoit 3.3.4.0
Баг в том что интерпритатор не распознает ошибку в синтаксисе.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Понятно!

Но вот интересно!
Код:
MsgBox(0,"", Number(1))
MsgBox(0,"", Number(1 Not=0))
MsgBox(0,"", Number(Not 0))
MsgBox(0,"", Number(Not=0))

Только в последнем случае Autoit выдаст ошибку. Следовательно, сдаётся мне что в
Код:
Number(1 Not=0)
просто выполняется первое правильное решение, а именно
Код:
Number(1)
а на ошибку
Код:
Number(Not=0)
он просто не обращает внимания, так как результат уже получен.
P.S. Или я чего-то недопонимаю :scratch:

Yashied сказал(а):
На мой взгляд это вообще неверная запись. Not относится к логическим операциям, а "=" к арифметическим.
Полностью согласен с Yashied
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
На мой взгляд это вообще неверная запись
Я знаю, я наткнулся на это случайно, и пишу про баг в обработчике, а не про то что это должно работать.


Добавлено:
Сообщение автоматически объединено:

Запостил тикет не эту тему, Jon написал что фиксить не будут, т.к это подразумивает значительное изменение в коде.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
SyDr сказал(а):
Garrett [?]
просто выполняется первое правильное решение, а именно
Ничего подобного. В скобках записано выражение. Наивысший приоритет имеет оператор Not

Вы абсолютно правы, но вот этот код выдаст вам ошибку синтаксиса.

Код:
MsgBox(0,"", Number(2 + Not=1))


Тут Autoit встречает арифметическое выражения, и так как Not имеет более высокий приоритет, выдаст вам Error in expression

А в примере

Код:
MsgBox(0,"", Number(1 Not=0))


как я подозреваю, Autoit выполняя функцию Number встретив единицу и не найдя никакого арифметического выражения, "понимает" что нужно вернуть единицу. А ошибку просто не замечает, так как результат получен.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Вы все конечно правы, но, как я понимаю, проблема именно в том, что интерпритатор проглатывает то, что не пропускает "Tools\SyntaxCheck Prod". Что есть не хорошо.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
как я подозреваю, Autoit выполняя функцию Number встретив единицу и не найдя никакого арифметического выражения, "понимает" что нужно вернуть единицу. А ошибку просто не замечает, так как результат получен.
Не совсем, вот пример:

Код:
MsgBox(0,"", Number(1 Not=1))

вернёт 0, т.к 1 не ровняется 1 :smile: - тут всё же производится логическая операция... Autoit вообще начинает "расматривать" строку как бы изнутри, выполняя сперва вложенные условия и операторы).
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Хм, да вы правы, в этом примере Not обрабатывается, как положено :scratch:
Хотя правильный синтаксис Not 1 а не Not=1

Интересно вот что.

Код:
MsgBox(0,"", Number(1=Not 1))


Тоже возвращает ноль, и Check Prod пропускает. :smile:
 

SyDr

Сидра
Сообщения
651
Репутация
158
Garrett [?]
как я подозреваю, Autoit выполняя функцию Number встретив единицу и не найдя никакого арифметического выражения, "понимает" что нужно вернуть единицу. А ошибку просто не замечает, так как результат получен.
Сначала вычисляется значение выражения и только потом выполняется функция. Функция здесь непричём (см. примеры ниже).

И вообще, проблема действительно с "проглатыванием" интерпретатором синтаксически неверных выражений. Ошибка возникает при использовании конструкции <Выражение>|<Оператор (некоторые)> Not (Перед Not не могут находиться выражения/данные/часть операторов)

Код:
MsgBox(4096, "", 2 * 5 Not = Not 0 = "abc")
MsgBox(4096, "", "cba" = Not 5 * 5 Not = "abc") ; Вот это выражение вообще жесть, как думаете, какой результат? :)
MsgBox(4096, "", 0 Not)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
«Доктор, меня игнорируют ©» :laugh:...

я всё это уже написал, а вы повторяете, как будто не читаете мои сообщения... хотя учитывая последние баги форума, я не удевлюсь если окажется, что мои сообщения вижу только я :wall_brake: :rip:
 

SyDr

Сидра
Сообщения
651
Репутация
158
:
Если решил задачу неправильно - не признавайся преподавателю, что решил не правильно. Скажи, что понял условие по-другому.


Просто я пытаюсь доказать человеку, что дело не функции Number.
Пожалуй, последнее замечание на эту тему.
Garrett [?]
А в примере
Код: AutoIt
MsgBox(0,"", Number(1 Not=0))
как я подозреваю, Autoit выполняя функцию Number встретив единицу и не найдя никакого арифметического выражения, "понимает" что нужно вернуть единицу. А ошибку просто не замечает, так как результат получен.

Код:
MsgBox(0,"", Number(Random(10, 10000) Not=0))
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR сказал(а):
«Доктор, меня игнорируют ©» :laugh:...

я всё это уже написал, а вы повторяете, как будто не читаете мои сообщения... хотя учитывая последние баги форума, я не удевлюсь если окажется, что мои сообщения вижу только я :wall_brake: :rip:

Нет, я прекрасно вижу ваши сообщения! :smile:

SyDr [?]
Просто я пытаюсь доказать человеку
Я всего лишь высказывал свои мысли, по теме. Мог и ошибаться. Мне было интересно разобраться в вопросе.
Однако если это вас напрягает, то извините!
Доказывать я никому ничего не собираюсь!

SyDr вы правы!!!
 
Верх