【发布时间】:2015-02-10 18:24:50
【问题描述】:
我正在学习 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...
【问题讨论】:
-
这个搜索查询包含一些关于 Lua 元表的信息:google.com/?gws_rd=ssl#q=lua+metatables
标签: lua lua-table metatable meta-method