or
не возвращает булев; скорее, он возвращает либо первое значение правды, либо последнее значение false, если ни одно из них не является истинным.
Например:
print(nil or 123) -- 123
print(123 or nil) -- 123
print(456 or 123) -- 456
print(nil or false or "hi") -- hi
Линии вы нашли идиоматическое использование этого свойства для установки переменного значения по умолчанию, если это nil
или false
, но сохраняя свою ценность, если это что-нибудь еще. Пример
function foo(arg)
arg = arg or "hello world!"
print(arg)
end
foo() -- "hello world!"
foo("goodbye world!") -- "goodbye world!"
and
работает аналогичным образом; он возвращает либо первое значение ложности, либо последнее значение правды. Используя два вместе, вы также можете эмулировать тройного оператора:
function foo(bool)
print(bool and "yes" or "no") -- second value (the true value) must be truthy
end
print(foo(true)) -- "yes"
print(foo(false)) -- "no"
print(foo(123)) -- "yes"
Спасибо! Теперь я понял. – Strogg