Иногда при скриптинге в
Lua встречается следующая конструкция:
if condition then
s = "on"
else
s = "off"
end
В большинстве языков подобная запись легко заменяется тернарным оператором:
s = condition ? "on" : "off"
Однако в
Lua тернарный оператор отсутствует. Но не оставлять же такую громоздкую конструкцию?
Выход прост — к нам придут на помощь логические операторы
or и
and. В
Lua для них выполняется следующее:
- оператор and возвращает первое ложное значение среди сових операндов; если оба операнда истинны, возвращается последний из них
- оператор or возвращает первое истинное значение среди своих операндов; если оба операнда ложны, возвращается последний из них
Следуя этой нехитрой логике можно записать следующую конструкцию:
s = condition and "on" or "off"
В самом деле,
or имеет более низкий приоритет, и поэтому сначала выполняется контрукция с
and. Если условие
condition истинно, то по логике оператора
and возвращается его второй аргумент ("on"). Строчка истинна, и поэтому
or возвращает ее как результат всего выражения.
Если же уcловие
condition ложно, то оператор
and возвращает ложь, и оператор
or, получив ложь в качестве первого операнда, возвращает значение второго ("off").
Таким образом, в результате махинаций с логическими операторами мы получили тернарный оператор в
Lua!