我有一个像这个例子的metatable设置:
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)
我该如何解决这个问题?
答案 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