我正在学习 Lua 的元表如何在 OOP 中工作,我对从 lua-users wiki 上的面向对象教程中阅读的代码感到困惑。有人可以帮助解释以下问题吗?谢谢。
问题1:wiki的解释:这里我们在类表中添加一个元表,该元表有__call元方法,当一个值像函数一样被调用时触发。我们让它调用类的构造函数,所以创建实例时不需要 .new 。
(1)示例中的__call是如何被调用的,所以构造函数被调用了?
(2)“cls”是指“MyClass”吗?
setmetatable(MyClass, {
__call = function (cls, ...)
return cls.new(...)
end,
})
问题 2:以下代码中的 {} 指的是什么?
function MyClass.new(init)
local self = setmetatable({}, MyClass)
self.value = init
return self
end
**这里是完整的代码:
local MyClass = {}
MyClass.__index = MyClass
setmetatable(MyClass, {
__call = function (cls, ...)
return cls.new(...)
end,
})
function MyClass.new(init)
local self = setmetatable({}, MyClass)
self.value = init
return self
end
function MyClass:set_value(newval)
self.value = newval
end
function MyClass:get_value()
return self.value
end
local instance = MyClass(5)
-- do stuff with instance...