• lua OOP实现对象的链式调用


    数学中的链式法则

    http://sx.zxxk.com/ArticleInfo.aspx?InfoID=164649

    链式微分法则:

    实数运算的链式法则:

    对数运算的链式法则:

    平行公理的链式法则:

    向量运算的链式法则:

    JS对象链式调用方法

    http://stackoverflow.com/questions/15029309/how-to-write-jquery-chainable-functions-for-local-usinghttp://stackoverflow.com/questions/15029309/how-to-write-jquery-chainable-functions-for-local-using
    ar obj = {
        test : function(){ 
            alert("Y"); 
            return this; 
        },
        test2 : function(){ 
            alert("2"); 
            return this; 
        }
    }
    obj.test().test2(); // And so on since it returns this

    lua OOP实现

    --

    -- Class helper routines

    --

    -- Instantiates a class

    local function _instantiate(class, ...)

        local inst = setmetatable({__class=class}, {__index = class})

        if inst.__init__ then

            inst:__init__(...)

        end

        return inst

    end

     

     

    --- Create a Class object (Python-style object model).

    -- The class object can be instantiated by calling itself.

    -- Any class functions or shared parameters can be attached to this object.

    -- Attaching a table to the class object makes this table shared between

    -- all instances of this class. For object parameters use the __init__ function.

    -- Classes can inherit member functions and values from a base class.

    -- Class can be instantiated by calling them. All parameters will be passed

    -- to the __init__ function of this class - if such a function exists.

    -- The __init__ function must be used to set any object parameters that are not shared

    -- with other objects of this class. Any return values will be ignored.

    -- @param base The base class to inherit from (optional)

    -- @return A class object

    -- @see instanceof

    -- @see clone

    function class(base)

        -- __parent 属性缓存父类,便于子类索引父类方法

        return setmetatable({__parent = base}, {

            __call = _instantiate,

            __index = base

        })

    end

     

     

    --- Test whether the given object is an instance of the given class.

    -- @param object Object instance

    -- @param class Class object to test against

    -- @return Boolean indicating whether the object is an instance

    -- @see class

    -- @see clone

    function instanceof(object, class)

        local meta = getmetatable(object)

        while meta and meta.__index do

            if meta.__index == class then

                return true

            end

            meta = getmetatable(meta.__index)

        end

        return false

    end

     

     

    local ChainClass = class()

    ChainClass.setFlag = function ( self, flag )

        self.flag = flag

        print("set flag = "..flag)

        return self

    end

     

     

    ChainClass.setType = function ( self, type )

        self.type = type

        print("set type = "..type)

        return self

    end

     

     

    ChainClass.printAttrs = function ( self, flag )

        for k,v in pairs(self) do

      print("name="..k.." value="..tostring(v))

        end

        return self

    end

     

     

    local chainObj = ChainClass()

     

    chainObj:setFlag(1):setType(2):printAttrs()

  • 相关阅读:
    sqlserver计算时间差DATEDIFF 函数
    C# join 子句(C# 参考)
    C# join 子句(C# 参考)
    MongoDB 监控备份工具MMS
    MongoDB 监控备份工具MMS
    mongodb$slice (aggregation)
    mongodb$slice (aggregation)
    1004:字符三角形
    1004:字符三角形
    1003:对齐输出
  • 原文地址:https://www.cnblogs.com/lightsong/p/5738649.html
Copyright © 2020-2023  润新知