Lua:来自metatable的表达式返回nil而不是false

时间:2018-04-03 16:41:46

标签: lua expression metatable

我有一个像这个例子的met​​atable设置:

    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时,它返回一个布尔 true 。 我唯一的问题是,当表达式为false时,表达式返回 nil ,而不仅仅是布尔 false

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是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