zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    NPOI操作 EXCEL文件
    mysql 临时变量,临时表
    ReSharper制作Template帮助我们快速输入代码
    临时表的实际运用
    如何避免项目重复循环引用
    mysql 5.1以上版本数据库 使用定时器功能(Event)
    Fedora12下装SMPlayer
    Fedora12启动时激活网卡并将firefox不设置为脱机工作
    设置yum
    Fedora 有用更新源上海交大的yum源
  • 原文地址:https://www.cnblogs.com/lightsong/p/5738649.html
Copyright © 2011-2022 走看看