LUA 的private 變數作法如下
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
而private function 的作法如下,嚴格來跟C語言的OOP的私有函數還是不太一樣的觀念,
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()) --> 因為是私有函數,所以無法被呼叫
柯老師的範例程式可以在此下載
參考資料在此
更多完整的LUA OOP 參考資料在此