Состояние оценивается неправильно (Lua 4) - PullRequest
2 голосов
/ 04 августа 2020

Я пытаюсь использовать эту функцию в Lua 4:

function ternary(cond, T, F)
    if cond then return T else return F end
end

В этом контексте:

loadHW1 = false
print(ternary(loadHW1 == true, "this should not appear", nil))

Однако текст всегда печатается, когда вместо этого я ожидаю результат будет nil. Что я делаю не так? Спасибо.

[ed]

Я переключился на это, но все равно получаю результат «это правда»:

loadHW1 = 0
print(ternary(loadHW1, "this is true", "this is false"))

1 Ответ

5 голосов
/ 04 августа 2020

Lua 4 не имеет логических значений: они были введены в Lua 5.

В Lua 4 только nil является ложным; все остальное, включая 0, является истинным.

В вашем коде false и true интерпретируются как неопределенные глобальные переменные, и поэтому обе имеют значение nil. Следовательно, loadHW1 == true становится nil == nil, что верно, и поэтому ternary получает 1 для cond.

Если вы хотите использовать false и true в Lua 4, определите их следующим образом:

false = nil
 true = 1
...