• 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就好, 后面的就不研究了.

  • 相关阅读:
    大数的四则运算
    整数划分问题(递归法)
    浅谈C++中内存分配、函数调用和返回值问题
    栈的模拟运用 SOJ3897 dance2
    C/C++:sizeof('a')的值为什么不一样?
    浅谈C++中指针和引用的区别
    n!的分解 soj 2666
    char *a 和char a[] 的区别(指针和数组的区别)
    错排公式的推导
    浅谈C语言中的指针
  • 原文地址:https://www.cnblogs.com/Montauk/p/5457981.html
Copyright © 2020-2023  润新知