2014-12-09 2 views
2

Не могли бы вы рассказать, что это значит? Я знаю об основных объявлениях переменных и указании, но это путает. Что разница между этимЧто это значит в Lua? "var = var или"

var = var or { 
     "one", 
     "two", 
     "three", 
    } 

и

var = { "one", 
     "two", 
     "three", 
    } 

Я быстро проверил вручную и не может найти объяснения.

ответ

6

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" 
+0

Спасибо! Теперь я понял. – Strogg

Смежные вопросы