您的位置:首页 > 编程语言 > Lua

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
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 面向对象