方法/1
Dog = {}
function Dog:new()
local newObj = {sound = 'woof'}
return setmetatable(newObj, { __index = self })
end
方法/2
Dog = {}
function Dog:new()
local newObj = {sound = 'woof'}
self.__index = self
return setmetatable(newObj, self)
end
大多数时候我看到人们使用这种self.__index = self
方法,对我来说这似乎很笨拙。Dog
为什么要使用不构成元表的所有附加方法传递整个对象setmetatable
?Method/1适合将新对象设置为metatable.__index
对象Dog
,它也更干净。
是否有充分的理由使用Method/2而不是Method/1?
一些额外的代码来提供上下文,它适用于这两种方法
function Dog:makeSound()
print('I say ' .. self.sound)
end
mrDog = Dog:new()
mrDog:makeSound()