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 temporary table and table variable

    Temporary tables are created in tempdb.  The name "temporary" is slightly misleading, for ...

  2. js 传参报错 参数含有数字、字母组合的字符串SyntaxError: identifier starts immediately after numeric literal

    报错的意思是标识符以数字开头,这是因为js是弱类型的语言当发现第一个数字是就自动转化为数字类型的但是其中还含有字符所以报了错,‘ 报错的原因是因为我们想传的字符串,但是js却当成数字,所以需要给传的参 ...

  3. kinect for windows sdk

    https://msdn.microsoft.com/library/dn799271.aspx

  4. linux type命令用法_转

    转自:http://codingstandards.iteye.com/blog/831504 在脚本中type可用于检查命令或函数是否存在,存在返回0,表示成功:不存在返回正值,表示不成功. $ t ...

  5. 第二篇 Replication:分发服务器的作用

    本篇文章是SQL Server Replication系列的第二篇,详细内容请参考原文. 分发服务器是SQL Server复制的核心组件.分发服务器控制并执行数据从一个服务器移动到另一个服务器的进程. ...

  6. 获取git的最后一次提交的commit id

    git log --pretty=format:"%h" | head -1  | awk '{print $1}' 可以放到xcode  build setting  post ...

  7. 自动档车的P档和N档的区别

    P档时,驻车齿轮在变速箱内被部分锁死,所以此时平地上不踩刹车,车辆有一定的驻车效果.N档就是空档,发动机与传动轴在变速器位置彻底分离,没有连接.因此P档适合停车和驻车,就是到地方了,要熄火时挂P档,拉 ...

  8. 使用 CSS 的 :before 和 :after 选择器做一个箭头样式

    对于 :before 和 :after 选择器,大家并不陌生,但是很少有人会主动去用它们.先解释下它们的定义和用法: :before 选择器在被选元素的内容前面插入内容,:after 选择器在被选元素 ...

  9. jQuery 扩展功能

    源码如下: /*! * 说明:Jquery库扩展 * 创建时间: leo 2016/10/13 */ (function (window, jQuery, undefined) { jQuery.ex ...

  10. CSS文档流与块级元素和内联元素

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...