Luaのオブジェクト向け実装方式
2251 ワード
1、簡単な例を見て
2、いくつかの実現対象の方式
a、オブジェクトファクトリモード、例えば前のコードのcreate関数
b、オブジェクトを表で表すオブジェクトのデータと方法を1枚の表に入れ、プライベートメンバーは隠されていないが、簡単なスクリプトには完全に受け入れられる.
メンバーメソッドの定義function obj:method(a 1,a 2,...)...endは(コロン)function objに等価である.method(self, a1, a2, ...) … endは(点号)objに等価である.method = function (self, a1, a2, ...) … end
メンバーメソッドの呼び出しobj:method(a 1,a 2,...)はobjに等価である.method(obj, a1, a2, ...)
3、オブジェクトの単純継承
4、関数閉パッケージ
1つの関数とその使用するすべてのupvalueは、1つの関数閉パッケージを構成します.
Upvalue 1つの関数で使用される定義の関数体以外の局所変数(external local variable)は、この関数のupvalueと呼ばれます.
前のコードでは、関数countDownで使用される定義の関数createCountdownTimerでのローカル変数msがcountDownのupvalueであるが、msはcreateCountdownTimerではupvalueではなくローカル変数である.
function create(name, id)
local obj = { name = name, id = id }
function obj:SetName(name)
self.name = name
end
function obj:GetName()
return self.name
end
function obj:SetId(id)
self.id = id
end
function obj:GetId()
return self.id
end
return obj
end
o1 = create("Sam", 001)
print("o1's name:", o1:GetName(), "o1's id:", o1:GetId())
o1:SetId(100)
o1:SetName("Lucy")
print("o1's name:", o1:GetName(), "o1's id:", o1:GetId())
:
o1's name: Sam o1's id: 1
o1's name: Lucy o1's id: 100
2、いくつかの実現対象の方式
a、オブジェクトファクトリモード、例えば前のコードのcreate関数
b、オブジェクトを表で表すオブジェクトのデータと方法を1枚の表に入れ、プライベートメンバーは隠されていないが、簡単なスクリプトには完全に受け入れられる.
メンバーメソッドの定義function obj:method(a 1,a 2,...)...endは(コロン)function objに等価である.method(self, a1, a2, ...) … endは(点号)objに等価である.method = function (self, a1, a2, ...) … end
メンバーメソッドの呼び出しobj:method(a 1,a 2,...)はobjに等価である.method(obj, a1, a2, ...)
3、オブジェクトの単純継承
function createRobot(name, id)
local obj = { name = name, id = id }
function obj:SetName(name)
self.name = name
end
function obj:GetName()
return self.name
end
function obj:GetId()
return self.id
end
return obj
end
function createFootballRobot(name, id, position)
local obj = createRobot(name, id)
obj.position = "right back"
function obj:SetPosition(p)
self.position = p
end
function obj:GetPosition()
return self.position
end
return obj
end
4、関数閉パッケージ
1つの関数とその使用するすべてのupvalueは、1つの関数閉パッケージを構成します.
Upvalue 1つの関数で使用される定義の関数体以外の局所変数(external local variable)は、この関数のupvalueと呼ばれます.
function createCountdownTimer(second)
local ms = second * 1000
local function countDown()
ms = ms - 1
return ms
end
return countDown
end
timer1 = createCountdownTimer(1)
for i = 1, 3 do
print(timer1())
end
print("------------")
timer2 = createCountdownTimer(1)
for i = 1, 3 do
print(timer2())
end
:
999
998
997
------------
999
998
997
前のコードでは、関数countDownで使用される定義の関数createCountdownTimerでのローカル変数msがcountDownのupvalueであるが、msはcreateCountdownTimerではupvalueではなくローカル変数である.