• LUA之面向对象


        Account = { balance=0,
                    withdraw = function (self, v)
                                 self.balance = self.balance - v
                               end
                  }
        
        function Account:deposit (v)
          self.balance = self.balance + v
        end
        
        Account.deposit(Account, 200.00)
        Account:withdraw(100.00)

    上面这个例子, 首先, Account是一个table, 里面两个元素, 一个是key为balance, value为0, 一个是一个key为withdraw, value是一个函数.

    可以看得出:

    1.  函数可以在table里面定义, 这个跟js很像.

    2.  self是LUA里面的this

    3.  调用函数的方法是用.

    4. 如果你想省略self当形参, 可以用冒号来定义跟使用这个函数.

    另外, 下面这个例子说明LUA真的是OO:

        Account = {balance = 0}
        function Account.withdraw (v)
          Account.balance = Account.balance - v
        end
        a = Account; Account = nil
        a.withdraw(100.00)   -- ERROR!

    也就是说, 当一个变量指向另一个对象, 就无法再调用这个对象的有关原来这个对象的field了, 唯一的写法是用self, 也就是this, 把自己的field指向自己的field, 听起来好像哪里不对.

        function Account.withdraw (self, v)
          self.balance = self.balance - v
        end

    再调用:

        a1 = Account; Account = nil
        ...
        a1.withdraw(a1, 100.00)   -- OK

    就OK了.

    后面还有OO的继承, 封装, 实现接口, 这些并不是我关心的, 毕竟LUA实现OO在我看来就是扯淡, 我需要它处理一点str就好, 后面的就不研究了.

  • 相关阅读:
    Java
    数据同步方案(附Java源码)
    windows下强大的wmic命令行工具
    利用dokan作虚拟磁盘开发
    用apache配置多个tomcat webapp
    apache2.2+tomcat配置[转]
    tomcat webdav
    Modbus/TCP
    AI语音验证码识别
    Win10 重命名文件夹:找不到指定文件。
  • 原文地址:https://www.cnblogs.com/Montauk/p/5457981.html
Copyright © 2020-2023  润新知