Это явное указание значения, назначенного выражению, когда ни одно из его предыдущих условий не является истинным.
В Lua выражения and
и or
возвращают значения, которые определяют их истинные значения, скореечем само плоское значение истинности, например:
function And(A,B)
if A then return B --if A is true, then the agreement of both depends on B
else return A end --otherwise, they're not, because A wasn't
end
function Or(a,b)
if A then return A --if A is true, then it doesn't matter if B was true
else return B end --otherwise, the truth hinges on B's value
end
В Lua все значения, кроме false
и nil
, оцениваются как true
в условных конструкциях, поэтому это поведение обычно используется какидиома для описания значений по умолчанию:
local color = color or 'blue' -- if `color` is defined to any value other than
-- `false` (such as any string), it will evaluate
-- as true, and the value will be returned from
-- the `or` statement (so `color` will be assigned
-- its own value and no change will result) -
-- if `color` is not defined, the `or` statement
-- will evaluate its `nil` value as false and
-- return the second value, 'blue'
Эта идиома может комбинироваться и расширяться различными способами:
local color = color or self.color
or (favorites and favorites.color)
or (type(favourites)=='table' and favourites.colour)
or get_defaults('color')
or {'red','blue','green','yellow'}[math.random(1,4)]
Традиционно, они остаются довольно простыми, возможно с несколькими цепочками or
случаев до значения по умолчанию.
Вот что мы видим здесь: случаи, когда используется or false
, относятся к значению последнего регистра для выражения.
Итак,в то время как это:
aura.texmode = (aura.texmode == 1 or aura.texmode == true or false);
можно было бы написать так же с таким же эффектом (поскольку сравнение ==
вернет либо true
, либо false
):
aura.texmode = (aura.texmode == 1 or aura.texmode == true);
добавлениеОкончательный or false
делает более очевидным, глядя на эту строку, что значение может быть ложным.
То же самое касается второго примера, в котором значение присваивается аргументу.