xiaoxiao2021-11-07  107

    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"))

    转载请注明原文地址: https://ju.6miu.com/read-678078.html

    最新回复(0)