Автор | Повідомлення |
---|---|
Повідомлення створено: 22. 01. 2016 [20:06]
|
|
dorn
Максим Алексеев
Автор теми
Зареєстрован(а) с: 24.10.2015
Повідомлення: 17
|
Здравствуйте, Роман. На Ubuntu 14.04 обновился недавно до версии 0.8.15. В JavaLikeCalc произошёл сбой приоритетов операций. На строку такого вида: false && true || false == false выдаёт false. |
Повідомлення створено: 22. 01. 2016 [21:03]
|
|
roman
Roman Savochenko
![]() Moderator Contributor Developer
![]() Зареєстрован(а) с: 12.12.2007
Повідомлення: 3788
|
"dorn" wrote: Здравствуйте, Роман. На Ubuntu 14.04 обновился недавно до версии 0.8.15. В JavaLikeCalc произошёл сбой приоритетов операций. На строку такого вида: false && true || false == false выдаёт false. Правильно, поскольку для этих операций не работают приоритеты, а работает последовательная проверка-вычисление операций условий в контексте. Скобки просто ставьте! Не ошибка! Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 24. 01. 2016 [13:36]
|
|
IrmIngeneer
Константин \m/
![]() Contributor Sponsor
Зареєстрован(а) с: 16.09.2010
Повідомлення: 185
|
"dorn" wrote: ... обновился недавно до версии 0.8.15. В JavaLikeCalc произошёл сбой приоритетов операций. На строку такого вида: false && true || false == false выдаёт false. В 0.8.14 точно так же. А в какой не так? |
Повідомлення створено: 25. 01. 2016 [08:50]
|
|
dorn
Максим Алексеев
Автор теми
Зареєстрован(а) с: 24.10.2015
Повідомлення: 17
|
Да, может и в 8.14 тоже так было.. В таком случае нужно в документации http://wiki.oscada.org/Doc/JavaLikeCalc?v=13mz п.1.2 пометить операции && и || одним цветом |
Повідомлення створено: 25. 01. 2016 [11:16]
|
|
roman
Roman Savochenko
![]() Moderator Contributor Developer
![]() Зареєстрован(а) с: 12.12.2007
Повідомлення: 3788
|
"dorn" wrote: Да, может и в 8.14 тоже так было.. В таком случае нужно в документации http://wiki.oscada.org/Doc/JavaLikeCalc?v=13mz п.1.2 пометить операции && и || одним цветом OK, помечу. Собственно ранее, в упрощённой реализации, эти приоритеты там и работали. А потом, кода добавилась условная проверка-исполнение последующего подвыражения, приоритеты там работать перестали. Да собственно в том-же С++ именно по этой причине компилятор ругается когда смешиваются операции "||", "&&" и я лично всегда их скобками выделяю. Что касается условной проверки, то, например, для выражения ниже функция extCheckCall() вообще будет вызываться только в случае v1 = false. JAVASCRIPT rez = v1 || extCheckCall(); А для выражений ниже становится возможной динамическая работа в принципе: JAVASCRIPT if(nPnt && (rVal=nPnt.extCheckCall())) {SomeDo}; Learn, learn and learn better than work, work and work.
|