Lua:元表中的表达式返回 nil 而不是 false

我设置了一个如下所示的元表:

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

--我也尝试了这个,但也返回 nil
return (person.onRoad and person.inCar) or (nil and false)

我如何解决这个问题?

点赞
用户6834680
用户6834680

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

将以下代码重写为:

if Class[k] then
   return Class[k](self, ref)
else
   return ref[k]
end
2018-04-03 17:14:55