Программирование на Lua | ||
Часть I. Язык Глава 3. Выражения |
print(4 and 5) --> 5 print(nil and 13) --> nil print(false and 13) --> false print(4 or 5) --> 4 print(false or 5) --> 5Оба оператора, and и or, используют редуцированное вычисление, т.е. обрабатывают второй операнд лишь тогда, когда это необходимо.
Удобна идиома Lua x = x or v
, которая эквивалентна
if not x then x = v endт.е.,
x
устанавливается в значение v
, если x
не определена (подразумевается, что x
не установлена в false).
Другая полезная идиома - (a and b) or c
(или просто a and b or c
, т.к. and имеет более высокий приоритет, чем or), которая эквивалентна выражению на С
a ? b : cпри условии, что
b
не Ложь. Например, можно выделить максимальное из двух чисел x
и y
, используя операцию вида
max = (x > y) and x or yКогда
x > y
, первое выражение оператора and Истинно, поэтому результатом and будет второй аргумент (x
) (который также Истина, т.к. является числом (напоминаю, что число 0 и значение nil - различны в силу принадлежности к разным типам, прим. переводчика)), и затем or помещает в переменную свой результат, которым является результат первого выражения, т.е. x
. В случае, если x > y
является Ложью, выражение and вернет false, таким образом результатом or будет его второй аргумент, y
.
Оператор not всегда возвращает true or false:
print(not nil) --> true print(not false) --> true print(not 0) --> false print(not not nil) --> false
Copyright © 2003-2004 Roberto Ierusalimschy. All rights reserved. | Перевод на русский Artem13 |