【问题标题】:Lua: Expression from metatable returns nil instead of falseLua:来自元表的表达式返回 nil 而不是 false
【发布时间】:2018-04-04 01:14:55
【问题描述】:

我有一个类似这个例子的元表设置:

    setmetatable(self, {
    __index = function(_,k)
        return Class[k] and Class[k](self, ref) or ref[k]
    end
})

还有我的功能:

function Class:isDriving(person)
   return (person.onRoad and person.inCar) or false
end

它让我可以做这样的事情:

print(driver.isDriving)

现在一切正常,当表达式为真时,它返回一个布尔值true。 我唯一的问题是表达式在其为 false 时返回 nil,而不仅仅是一个布尔值 false

--I tried this too, but also returns nil
return (person.onRoad and person.inCar) or (nil and false)

我该如何解决这个问题?

【问题讨论】:

    标签: lua expression metatable


    【解决方案1】:

    问题是Class[k](self, ref) 可能返回false
    重写

    return Class[k] and Class[k](self, ref) or ref[k]
    

    作为

    if Class[k] then
       return Class[k](self, ref)
    else
       return ref[k]
    end
    

    【讨论】:

    • 有趣,您的解决方案解决了问题。我仍然不完全理解有什么不同。我的 oneliner 和你的基本一样吧?
    • @RichardAvalos - 不一样。 Lua 三元表达式cond and A or BA = false 时无法按预期工作
    猜你喜欢
    • 2015-03-31
    • 2021-07-15
    • 2012-05-15
    • 1970-01-01
    • 2018-05-02
    • 2018-03-31
    • 2012-05-31
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多