function account:new(o)
o = o or {}
setmetatable(o,self)
self.__index=seif
return o
end
function account:hello()
print("hello")
end
s1=account:new()
s2=s1:new{limet=100}
s1继承account,s2继承s1
------------------------------
local function search(k,parents)
for i=1,#oarents do
if parents[i][k] then return parents[i][k] end
end
end
function CreateClass(...) 多重继承
local newc={} --新的类
local parents={...} --父类
setmetatable(newc,{__index=function(t,k)
return search(k,parents) --- 缓存方法 v=search(k,parents) t[k]=v return v
end})
newc.__index=newc --将news作为实例的元表
function newc:new(o)
o = o or {}
setmetatable(o,newc)
return o
end
return newc
end
newClass = CreateClass(account)
s = newClass:new()
s.hello()
-----------------
私密性:
function newAccount(init)
local self={balance=init}
local set=function(val)
self.balance=val
end
local get=function()
return self.balance
end
return {
set=set,
get=get
}
end
acc = newAccount(100)
print(acc.get())
self是闭包的变量,不能直接访问
function newObject(value)
return function(action,v)
if action == "get" then return value
else if action == "set" then value=v
else error("invalid action")
end
end
end
d=newObject(0)
print(d("get"))