zoukankan      html  css  js  c++  java
  • Lua工具类

    --实现拷贝对象功能
    function clone(object)
        local lookup_table={}
        local function _copy(object)
            if type(object)~="table" then
                return object
            elseif lookup_table[object] then
                return lookup_table[object]
            end
            local new_table={}
            lookup_table[object]=new_table
            for key,value in pairs(object) do
                new_table[_copy(key)]=_copy(value)
            end
            return setmetable(new_table,getmetatable(object))
        end
        return _copy(object)
    end
    
    --生成一个类
    function class(classname, super)
        local superType = type(super) --type返回一个描述给定值的类型的字符串
        local cls
    
        if superType ~= "function" and superType ~= "table" then
            superType = nil
            super = nil
        end
    
        if superType == "function" or (super and super.__ctype == 1) then
            -- inherited from native C++ Object
            cls = {}
    
            if superType == "table" then
                -- copy fields from super
                for k,v in pairs(super) do cls[k] = v end
                cls.__create = super.__create
                cls.super    = super
            else
                cls.__create = super
            end
    
            cls.ctor    = function() end
            cls.__cname = classname
            cls.__ctype = 1
    
            function cls.new(...)--构造函数
                local instance = cls.__create(...)
                -- copy fields from class to native object
                for k,v in pairs(cls) do instance[k] = v end
                instance.class = cls
                instance:ctor(...)
                cls_add_instance(classname,instance)
                return instance
            end
    
        else
            -- inherited from Lua Object
            if super then
                cls = clone(super)
                cls.super = super
            else
                cls = {ctor = function() end}
            end
    
            cls.__cname = classname
            cls.__ctype = 2 -- lua
            cls.__index = cls
    
            function cls.new(...)
                local instance = setmetatable({}, cls)--setmetatable返回被设置的表
                instance.class = cls
                instance:ctor(...)
                cls_add_instance(classname,instance)
                return instance
            end
        end
    
        return cls
    end
  • 相关阅读:
    线程间的通信 与 线程池
    线程同步
    静态代理模式
    多线程状态
    线程、进程、多线程
    Java面向对象之泛型
    ConstraintLayout 用法
    搞NDK开发
    Linux基础命令【记录】
    c# 的一些基本操作或属性
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/4465391.html
Copyright © 2011-2022 走看看