|
Программирование на 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 |
|