2016年3月22日火曜日

Luaでコンストラクタ定義

__callメタメソッドを使用する方法


local ClassA = setmetatable({}, {
    __call = function(cls, init)
	local self = {}

	-- localで変数を定義し、
	-- クロージャー経由でアクセスする事でprivate化。
	local private_field = init
	function self.get()
	    return private_field
	end

	return self
    end,
})

instanceA1 = ClassA(10)
instanceA2 = ClassA(20)
print(instanceA1.get())
print(instanceA2.get())

通常のメソッドを使用する方法


local function ClassB(init)
    local self = {}

    -- localで変数を宣言し、
    -- クロージャー経由でアクセスする事でprivate化。
    local private_field = init
    function self.get()
	return private_field
    end

    return self
end

instanceB1 = ClassB(10)
instanceB2 = ClassB(20)
print(instanceB1.get())
print(instanceB2.get())

[参考]

0 件のコメント:

コメントを投稿