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就好, 后面的就不研究了.
LUA之面向对象的更多相关文章
- Lua 之面向对象编程
Lua 之面向对象编程 Lua并不是为面向对象而设计的一种语言,因此,仅从原生态语法上并不直接支持面向对象编程,但Lua的设计中仍然包含了很多面向对象的思想,理解它们也更有助于理解Lua自身的一些高级 ...
- Lua学习----面向对象编程
1.类 再Lua中可以使用表和函数实现面向对象,将函数和相关的数据放置放置于同一个表中就形成了对象.例如: Measure = {width = 0, height = 0} function Mea ...
- lua的面向对象实现
百度搜索一下,给出出的解决方案和学习帖子很多,可是我还是有很多的问题! (1)什么是面向对象? (2)lua中怎么实现面向对象? (3)什么样的实现既简单又能完成我的功能? (4)一定要按照c++的方 ...
- Lua的面向对象,封装,继承,多态
概述 我们总所周知对象是由属性和方法组成的,要用lua要描述一个对象,也必然要有这两个特性,属性和方法.lua的基本结构是table,所以Lua的类,其实都是table,因为它可以存储普通的变量又可以 ...
- lua table面向对象扩展
一 .table扩展 -- 返回table大小 table.size = function(t) local count = 0 for _ in pairs(t) do count = count ...
- lua的面向对象
Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: Account = {balance = } function Account.withdraw(v) Accou ...
- Lua中面向对象
一.Lua中类的简单实现: (1)版本——摘自 Cocos2.0中的: --Create an class. function class(classname, super) local superT ...
- 【Lua】面向对象编程(二)
多重继承: module(...,package.seeall) local function search(k,plist) ,#plist do local v=plist[i][k] if ...
- 【Lua】面向对象编程(一)
类和对象: account.lua module(...,package.seeall) Account={balance=} Account.new=function(self,o) local ...
随机推荐
- Latency
1)在网络,延迟时间(latency),同义词为延迟,是表示从特定点得到一个数据包(packet)所花的时间.在一些情况下(例如,AT&T),延迟时间用发送出包到回到发送端这个运行一周的时间就 ...
- html5头部说明
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --><html lang="zh-cmn-Hans"> ...
- Java遇见HTML——JSP篇之JavaWeb简介
一.什么是WEB应用程序 Web应用程序是一种可以通过Web(互联网)访问的应用程序.Web应用程序的一个最大好处是用户很容易访问应用程序.用户只需要有浏览器即可,不需要再安装其他软件. 为什么要学习 ...
- 关于IOS框架的解释
- go 语言的库文件放在哪里?如何通过nginx代理后还能正确获取远程地址
/usr/local/Cellar/go/1.5.1/libexec/src/ 他的RemoteAddr 是从哪里获取? func (c *conn) RemoteAddr() Addr { if ! ...
- 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
[原文地址]Using Repository and Unit of Work patterns with Entity Framework 4.0 [原文发表日期] 16 June 09 04:08 ...
- 遇到could not find developer disk image 问题怎么解决
一般是设备的版本低于或者高于当前的xcode
- C++Primer 第三章
//1.位于头文件中的代码一般不应该使用using声明.这是因为头文件的内容会拷贝到所有引用它的文件中,可能会产生始料未及的命名空间冲突. // 三种使用命名空间中的名字的方法 using names ...
- G面经prepare: Jump Game Return to Original Place
第二题 算法 给你一个arr 返回 T 或者 F arr的每个数代表从这个点开始跳几部,返回T的情况:从这个arr中任意一个数开始跳,可以在每个元素都跳到且只跳到一次的情况下返回到开始跳的元素 比如[ ...
- 超炫的3D HTML源代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...