为什么要在布尔表达式的末尾添加"或false"?

Sam*_*ill 1 lua

我在这样看过lua中的代码

if (a==b or false) then
Run Code Online (Sandbox Code Playgroud)

"或假"的目的是什么?

这是原始代码:

        Function = function(self, aura, auraID)
        -- Store the version.
        -- aura.Version = 50000;
        -- Fix texmode/glow.
        aura.texmode = (aura.texmode == 1 or aura.texmode == true or false);
        -- Texture source.
        if(aura.owntex or aura.SourceType == PowaAuras.SourceTypes.Icon) then
            aura.SourceType = PowaAuras.SourceTypes.Icon;
        elseif(aura.wowtex or aura.SourceType == PowaAuras.SourceTypes.WoW) then
            aura.SourceType = PowaAuras.SourceTypes.WoW;
        elseif(aura.customtex or aura.SourceType == PowaAuras.SourceTypes.Custom) then
            aura.SourceType = PowaAuras.SourceTypes.Custom;
        elseif(aura.textaura or aura.SourceType == PowaAuras.SourceTypes.Text) then
            aura.SourceType = PowaAuras.SourceTypes.Text;
        else
            aura.SourceType = PowaAuras.SourceTypes.Default;
        end

    end
Run Code Online (Sandbox Code Playgroud)

这是另一个例子

            -- Iterate over element children.
        visible, hidden = self:UpdateScrollList(key, level+1, visible, hidden, 
            (parentShowing == true and item:GetExpanded() or false));
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 6

这看起来像是来自语法的行为:

a=b or false
Run Code Online (Sandbox Code Playgroud)

初始化a到的值b或者false如果b没有定义.

if你写的声明中,我没有看到任何目的,因为在==之前评估or.如果他们使用括号来改变操作的顺序,那么它可以用于验证b已经定义的,例如:

> a=nil
> b=nil
> if (a == (b or false)) then print("yikes") else print("aok") end
aok
> if (a == b or false) then print("yikes") else print("aok") end
yikes
Run Code Online (Sandbox Code Playgroud)