美文网首页
Lua Privacy、单方法

Lua Privacy、单方法

作者: 86a262e62b0b | 来源:发表于2020-03-10 13:19 被阅读0次

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

相关文章

  • Lua Privacy、单方法

    Privacy单方法 一. Privacy 首先,该函数创建一个表以保留内部对象的状态并将其存储在局部变量中sel...

  • lua脚本

    lua脚本 执行方法下载lua 打开cmd 或者命令界面 执行lua使用lua 文件

  • Lua基础知识(二)

    Lua中的面向对象 1.Lua中类的原理 Lua中没有类的概念,类是一个属性和方法的集合,而方法都是由方法名和方法...

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

  • unity_lua热更新_语录

    ** lua 调用unity方法中,如果是静态方法要用 "." 如果是非静态方法要用 ":"** 1.lua中字符...

  • 2019-01-14

    Lua与C交互学习笔记 Lua与C交互是通过虚拟栈实现的 在C中调用Lua 方法一 栈中的情况如下表所示 方法二 ...

  • SLua-Lua调用自定义C#类

    需要在Lua中调用c#类添加特性[CustomLuaClass],在Lua中调用方法的时候,给方法添加[MonoP...

  • Lua和C交互的简易教程

    Lua栈 要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处...

  • FreeSWITCH中的lua操作小结

    FreeSWITCH中的lua操作小结 lua中设置当前通道变量: 方法一: session:setVariabl...

  • Lua api(十) lua_pushboolean/lua_p

    前言# 前两章我们总结了lua_is*系列和lua_to*系列,掌握了lua栈内值的判断和转换方法,现在我们来看看...

网友评论

      本文标题:Lua Privacy、单方法

      本文链接:https://www.haomeiwen.com/subject/lbtwdhtx.html