Size: a a a

2021 October 16

G

GNU/Vsevolod in pro.lua
Потому что falsy в луа только nil и false
источник

G

GNU/Vsevolod in pro.lua
Есть
источник

IS

Ivan Stepanov in pro.lua
Я просто сделал i % 2, и код постоянно в true ветку переходил
источник

IS

Ivan Stepanov in pro.lua
точно
источник

IS

Ivan Stepanov in pro.lua
вообще не очень прозрачно
источник

G

GNU/Vsevolod in pro.lua
not (not 0) == true
источник

IS

Ivan Stepanov in pro.lua
ааааа
источник

IS

Ivan Stepanov in pro.lua
а теперь уже гвн код))
источник

IS

Ivan Stepanov in pro.lua
i % 2 ~= 0
источник

IS

Ivan Stepanov in pro.lua
приходится так выкручиваться
источник

IS

Ivan Stepanov in pro.lua
А как сделать
DEBUG and print("Debug: ...")?
источник

IS

Ivan Stepanov in pro.lua
без if
источник

IS

Ivan Stepanov in pro.lua
Понятно...
источник

IS

Ivan Stepanov in pro.lua
Никак
0 and print("true") or print("false")


lua: ./just_some_lua.lua:70: unexpected symbol near '0'
источник

S

Snusmumriken in pro.lua
Во-первых есть boolean. Во-вторых, ложное выражение есть только у nil и false.
0 == true
{} == true
-100500 == true

false == false
if nil then это не выполнится end
источник

S

Snusmumriken in pro.lua
Тебе нужно выражение возвращающее значения.

foo = true and 10 or 20 -- foo = 10
bar = false and 10 or 20 -- bar = 20

Print же ничего не возвращает, то есть выражение вроде
something = 0 and print("true") or print("false") выведет и то и другое:
Сначала определится ноль, он истинный, выражение перейдёт к print("true"), которое вернёт nil являющийся ложью.
Логическое выражение не выполнилось, идём дальше в or print("false") — оно выполняется, something теперь равен nil и оба текста вывелись. Для логических функций ты делаешь обёртки возвращающие true или что тебе нужно.
источник

S

Snusmumriken in pro.lua
Так что логические тернарники в наличии, просто они требуют выражения и определённые, несколько упрощённые механизмы.
источник

S

Snusmumriken in pro.lua
function tprint(...)
 print(...)
 return true
end

something = 0 and tprint("true") or tprint("false")

или
if (0 and tprint("true") or tprint("false")) then
 ...
end

Вот этот код будет выполнен именно так как тебе хочется, функция возвращает true и не ломает логические выражения ))
источник

IS

Ivan Stepanov in pro.lua
не, я не тернарник хотел, я хотел... оохх... я хотел short-circuit evaluation
источник

IS

Ivan Stepanov in pro.lua
источник