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

LUA之面向对象的更多相关文章

  1. Lua 之面向对象编程

    Lua 之面向对象编程 Lua并不是为面向对象而设计的一种语言,因此,仅从原生态语法上并不直接支持面向对象编程,但Lua的设计中仍然包含了很多面向对象的思想,理解它们也更有助于理解Lua自身的一些高级 ...

  2. Lua学习----面向对象编程

    1.类 再Lua中可以使用表和函数实现面向对象,将函数和相关的数据放置放置于同一个表中就形成了对象.例如: Measure = {width = 0, height = 0} function Mea ...

  3. lua的面向对象实现

    百度搜索一下,给出出的解决方案和学习帖子很多,可是我还是有很多的问题! (1)什么是面向对象? (2)lua中怎么实现面向对象? (3)什么样的实现既简单又能完成我的功能? (4)一定要按照c++的方 ...

  4. Lua的面向对象,封装,继承,多态

    概述 我们总所周知对象是由属性和方法组成的,要用lua要描述一个对象,也必然要有这两个特性,属性和方法.lua的基本结构是table,所以Lua的类,其实都是table,因为它可以存储普通的变量又可以 ...

  5. lua table面向对象扩展

    一 .table扩展 -- 返回table大小 table.size = function(t) local count = 0 for _ in pairs(t) do count = count ...

  6. lua的面向对象

    Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: Account = {balance = } function Account.withdraw(v) Accou ...

  7. Lua中面向对象

    一.Lua中类的简单实现: (1)版本——摘自 Cocos2.0中的: --Create an class. function class(classname, super) local superT ...

  8. 【Lua】面向对象编程(二)

      多重继承: module(...,package.seeall) local function search(k,plist) ,#plist do local v=plist[i][k] if ...

  9. 【Lua】面向对象编程(一)

    类和对象: account.lua   module(...,package.seeall) Account={balance=} Account.new=function(self,o) local ...

随机推荐

  1. SqlServer基础:Bit类型

    SqlServer的bit类是只0或者1,默认不输入值时为null,但是如果输入的值不是0和1时,则默认填充的值为1

  2. CURL常用命令(转)

    下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名 ...

  3. ifconfig命令(转)

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...

  4. 第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

  5. IIS URL Rewrite redirect from one Domain to another

    IIS URL Rewrite enables Web administrators to create powerful rules to implement URLs that are easie ...

  6. rpmdb出问题,重建rpmdb库

    1.备份原库 tar cvzf rpmdb-backup.tar.gz /var/lib/rpm 2.删除rpmdb库 rm -f /var/lib/rpm/__db.00* 3.重建库 rpm -- ...

  7. MS SQL 多连接数时修改数据库名称

    在MS SQL中,如果你想修改某一个数据库的名称,你可以通过下面几种方法实现. 方法一:使用SP_RENAMEDB系统存储过程实现. 语法: sp_renamedb [ @dbname = ] 'ol ...

  8. Swift游戏实战-跑酷熊猫 10 视差滚动背景

    原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.wi ...

  9. Subversion under Linux [Reprint]

    一.安装 yum install subversion 二.配置 本系统采用为每个项目单独建一版本库的策略.配置文件,密码文件,访问控制文件等都放在版本库的conf目录下. 所以每次开始一个新项目都必 ...

  10. ACM/ICPC竞赛

    ACM知识点分类   第一类:基础算法 (1) 基础算法:枚举,贪心,递归,分治,递推,构造,模拟 (2) 动态规划:背包问题,树形dp,状态压缩dp,单调性优化,插头dp (3) 搜索:dfs,bf ...