lua 面向对象使用
2014-08-28 10:45
417 查看
一直不知道lua 的metatable怎么用,偶然练习,发现还可以结合面向对象的概念一起用。分享最基础的代码如下:
-- filename "test.lua"
local t = {}
t.__index = t
function t:new(name, age)
local obj = {
__name = name,
__age = age,
}
self.tab = {name = name, age = age}
return setmetatable(obj, self)
end
function t:set(name, age)
self.__name = name
self.__age = age
end
function t:get(name)
if self.__name == name then
return self.__age
end
end
function t:printf()
print("name: "..self.__name)
print("age: "..self.__age)
end
return t
test_meta.lua
attention: 第一个文件: t.__index = t 必须要有,用metatable改变table的行为,让object1:printf() 和object2:printf() 得以找到要执行的函数。看到new返回的是obj,它本身并没有printf这个函数,将obj的metatable设为t后,它会去找t的相关函数,但是它不是直接去找,而是通过t.__index ,但是由于t.__index默认为nil。所以,没有t.__index = t,会报错。可以自行将其删掉试试。
-- filename "test.lua"
local t = {}
t.__index = t
function t:new(name, age)
local obj = {
__name = name,
__age = age,
}
self.tab = {name = name, age = age}
return setmetatable(obj, self)
end
function t:set(name, age)
self.__name = name
self.__age = age
end
function t:get(name)
if self.__name == name then
return self.__age
end
end
function t:printf()
print("name: "..self.__name)
print("age: "..self.__age)
end
return t
test_meta.lua
local object1 = (require "test"):new("Chenk", 23) local object2 = (require "test"):new("Qinly", 22) object1:printf() 输出 name: Chenk age: 23 print("-----------------") object2:printf() <span style="white-space:pre"> </span> 输出 name: Qinly age: 22
attention: 第一个文件: t.__index = t 必须要有,用metatable改变table的行为,让object1:printf() 和object2:printf() 得以找到要执行的函数。看到new返回的是obj,它本身并没有printf这个函数,将obj的metatable设为t后,它会去找t的相关函数,但是它不是直接去找,而是通过t.__index ,但是由于t.__index默认为nil。所以,没有t.__index = t,会报错。可以自行将其删掉试试。
相关文章推荐
- Lua-面向对象中函数使用时冒号(:)和点(.)的区别
- 在 slua 中使用更新的面向对象方案
- lua--面向对象使用middleclass
- 笔记: Lua基础: Table, Array, Namespace, Lua的面向对象
- 面向对象思想的头脑风暴(三)-使用接口进行解耦
- 这几天一直在整理网站的css文件.面向对象的集成可以使用
- PHP面向对象中this,self,parent区别和使用
- 面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)
- LuaOO (Lua与C++交互的面向对象封装)
- Asp.Net ajax 面向对象类型系统2 - 使用事件
- [原创]面向对象理解·抽象类和派生类理解和使用
- 面向对象的程序设计学习笔记-16-使用this指针
- 使用面向oo对象方法的12个优点
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 使用面向oo对象方法的12个优点
- 使用jquery来实现JS的类面向对象
- 使用面向oo对象方法的12个优点(转)
- 使用面向对象工具进行着面向过程的开发
- 【转】使用组合替代继承(面向对象软件设计的“开—闭”原则 )
- [翻译]Popfly系列课程4 - 使用Popfly介绍面向对象理论 --- 仅以此文纪念已经停止运营的Microsoft Popfly