@Leatington

Как установить nil переменной в тернарном выражении Lua?

По идее, код должен устанавливать nil, но по факту там 2
Есть способ сделать это тернарным выражением?
local i = 1
local k = 1

local res = ((i == k) and nil or 2)

print(tostring(res))
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
dollar
@dollar Куратор тега Lua
Делай добро и бросай его в воду.
Это не совсем тернарный оператор, а именно комбинация and и or.
Выражение:
A and B or C
аналогично тернарному оператору (которого в Lua нет), только если B истинно.
(доказательство)

Для начала вспомним некоторые правила синтаксиса Lua:
  • and возвращает первый операнд, если он ложный, иначе второй.
  • or возвращает первый операнд, если он истинный, иначе второй.
  • and имеет выше приоритет (т.е. выполняется первым).
  • Ложными в Lua являются только false и nil

Теперь построим таблицу истинности результатов:
616d9c7ad77a1439930797.png

Поэтому решение такое:
local res = ((i ~= k) and 2 or nil)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы