Здравствуйте!
Хотелось бы узнать, всегда ли интерпретатор Lua (и в частности QLua) вычисляет логические выражения полностью в операторах if, while и repeat, или же он прерывает их вычисление в том случае, когда результат уже заведомо известен?
В качестве примера можно привести такой оператор:
if (t_id ~= nil) and not IsWindowClosed(t_id) then ...
Если t_id == nil, то будет ли в данном случае осуществляться вызов функции IsWindowClosed(t_id)? Ведь и без этого ясно, что данное выражение будет равно false.
В компиляторах языков программирования типа Pascal или C (уже не помню точно какого из них) для управления поведением программы в таком случае была опция, которая называлась кажется "complete boolean eval", поскольку иногда этот вопрос имеет большое значение.
А как с этим обстоят дела в (Q)Lua?
Хотелось бы узнать, всегда ли интерпретатор Lua (и в частности QLua) вычисляет логические выражения полностью в операторах if, while и repeat, или же он прерывает их вычисление в том случае, когда результат уже заведомо известен?
В качестве примера можно привести такой оператор:
if (t_id ~= nil) and not IsWindowClosed(t_id) then ...
Если t_id == nil, то будет ли в данном случае осуществляться вызов функции IsWindowClosed(t_id)? Ведь и без этого ясно, что данное выражение будет равно false.
В компиляторах языков программирования типа Pascal или C (уже не помню точно какого из них) для управления поведением программы в таком случае была опция, которая называлась кажется "complete boolean eval", поскольку иногда этот вопрос имеет большое значение.
А как с этим обстоят дела в (Q)Lua?