LUA Private function 和 Private 變數

LUA 的private 變數作法如下
[php]
local function MyClass(init)
— the new instance
local self = {
— public fields go in the instance table
public_field = 0
}

— private fields are implemented using locals
— they are faster than table access, and are truly private, so the code that uses your class can’t get them
local private_field = init

function self.foo()
return self.public_field + private_field
end

function self.bar()
private_field = private_field + 1
end

— return the instance
return self
end

local i = MyClass(5)
print(i.foo()) –> 5
i.public_field = 3
i.bar()
print(i.foo()) –> 9
[/php]

而private function 的作法如下,嚴格來跟C語言的OOP的私有函數還是不太一樣的觀念,
[php]
local function MyClass(init)
— the new instance
local self = {
— public fields go in the instance table
public_field = 0
}

— private fields are implemented using locals
— they are faster than table access, and are truly private, so the code that uses your class can’t get them
local private_field = init

function self.foo()
return self.public_field + private_field
end
local function privatefunction2()
private_field = private_field + 10
end
function self.bar()
private_field = private_field + 1
local function privatefunction()
private_field = private_field + 10
end
privatefunction()
privatefunction2()
end

— return the instance
return self
end

local i = MyClass(5)
print(i.foo()) –> 5
i.public_field = 3
i.bar()
print(i.foo()) –> 29
— print(i.privatefunction2()) –> 因為是私有函數,所以無法被呼叫

[/php]

Screen Shot 2015-07-04 at 11.55.27 AM

柯老師的範例程式可以在此下載

參考資料在此

更多完整的LUA  OOP 參考資料在此

cococs2d-x LUA
CH02 LUACH04 SceneCH05 SpriteCH09 Cocos2d 原始程式CH10 cocos (cocos studio)CH11 工具CH99範例