zoukankan      html  css  js  c++  java
  • Lua多重继承

    http://blog.csdn.net/ssihc0/article/details/7742421

    代码收藏了,以后用的到
    --多重继承
    local function search(k,plist)
        for i=1,#plist do
            local v=plist[i][k] --   取一个基类
            if v then return v end
        end
    end
    
    function createClass(...)
        local c={};
        local parents={...};
    
        setmetatable(c,{__index=function(t,k) return search(k,parents) end } );
    
        c.__index=c;
    
        function c:new(o)
            o=o or {};
            setmetatable(o,c);
            return o;
        end
    
        return c;
    end
    
    Named={};
    function Named:getname()
        return self.name;
    end
    
    function Named:setname(n)
        self.name=n;
    end
    
    Account={balance=0};
    
    function Account:new(o)
        o= o or {}
        setmetatable(o,self);
        self.__index=self;
        return o;
    end
    
    function Account.deposit(self,v)
        self.balance=self.balance+v;
    end
    
    function Account:withdraw(v)
        if (v) > self.balance then error "insufficient funds"; end
        self.balance=self.balance-v;
    end
    
    NamedAccount=createClass(Account,Named);
    
    user=NamedAccount:new{name="user admin"};
    print (user:getname(),user.balance);

     http://my.oschina.net/u/156466/blog/401576

    local class1 = {}
    function class1:new()
        local obj = {}
        setmetatable(obj, {__index= class1})
        return obj
    end
    
    function class1:print1()
        print("class1:print()")
    end
    
    
    local class2 = {}
    function class2:new()
        local obj = {}
        setmetatable(obj, {__index= class2})
        return obj
    end
    
    function class2:print2()
        print("class2:print()")
    end
    
    function super(k, list)
        for i,v in ipairs(list) do
            local ret = v[k]
            if ret then
                return ret
            end
        end
    end
    
    
    local class3 = {}
    function class3:new()
        local obj = {}
        local  base = {class1, class2}
        --t为调用的对象,k为方法名
        setmetatable(class3, {__index= function(t,k) return super(k, base) end})
        setmetatable(obj, {__index = class3})
        return obj
    end
  • 相关阅读:
    HTML DOM Select add() 方法
    HTML DOM hasAttributes 方法
    Bootstrap4 表单
    HTML DOM Source 对象
    Java中,分布式session存储解决方案
    string.padStart (String) – JavaScript 中文开发手册
    数组模拟栈
    栈 Stack
    数据库的备份和还原
    数据库设计 — 范式
  • 原文地址:https://www.cnblogs.com/602147629/p/5181180.html
Copyright © 2011-2022 走看看