方法/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
ですか? メソッド/1metatable.__index
は、新しいオブジェクトをオブジェクトに設定するのに適していDog
ます。また、クリーンでもあります。
Method/1の代わりにMethod/2を使用する正当な理由はありますか?
コンテキストを提供するためのいくつかの追加コード。両方の方法で動作します
function Dog:makeSound()
print('I say ' .. self.sound)
end
mrDog = Dog:new()
mrDog:makeSound()