Lua Privacy、单方法

Privacy
单方法

一. Privacy

  • 首先,该函数创建一个表以保留内部对象的状态并将其存储在局部变量中self。然后,该函数为对象的每个方法创建闭包(即嵌套函数的实例)
  • 最后,该函数创建并返回外部对象,该外部对象将方法名称映射到实际的方法实现。
function newAccount ()
    --保存对象状态的table保存在闭包环境下
    local self = {balance = initialBalance}

    local withdraw = function (v)
        self.balance = self.balance - v
    end

    local deposit = function (v)
        self.balance = self.balance + v
    end

    local getBalance = function () return self.balance end

    return {
        withdraw = withdraw,
        deposit = deposit,
        getBalance = getBalance
    }
end

acc1 = newAccount(100.00)
acc1.withdraw(40.00)
print(acc1.getBalance())     --> 60

一. 单方法(The Single-Method Approach)

  • 适用于当对象只有一个方法时使用
  • 使用闭包,性能比table更好
  • 同样实现了Privacy功能
function newObject (value)
    return function (action, v)
        if action == "get" then return value
            elseif action == "set" then value = v
            else error("invalid action")
        end
    end
end

d = newObject(0)
print(d("get"))    --> 0
d("set", 10)
print(d("get"))    --> 10
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容