定义一个函数,返回值是一个对象。 这个就像显示定义一个构造函数一样,只不过最后要return一个对象。
在函数里面定义对象的变量名和函数。
注意: 在创建函数内部使用 self加引号来表示对象的函数(self:getName())
使用self加点来使用对象的变量。(self.name)
成员方法的定义
function obj:method(a1, a2, ...) … end 等价于
function obj.method(self, a1, a2, ...) … end等价于
obj.method = function (self, a1, a2, ...) … end
成员方法的调用
obj:method(a1, a2, …) 等价于
obj.method(obj, a1, a2, ...)
使用方法不对会报一下错误。翻译一下就是,尝试索引self的一个字符串变量,但是返回在查找不到的信息。
lua: object.lua:4: attempt to index local 'self' (a string value)
stack traceback:
object.lua:4: in function 'SetName'
object.lua:24: in main chunk
[C]: in ?
function create(name, id)
local obj = {name = name, id =id }
function obj:SetName(name)
self.name = name
end
function obj:SetId(id)
self.id = id
end
function obj:getName()
return self.name
end
function obj:getId()
return self.id
end
function obj.getInfo(self)
return self.id + 234
end
return obj
end
o1 = create("Sam", 001)
o2 = create("Ben", 999)
o2:SetName("Bunny")
print("获取所有信息",o2.getInfo(o2))
print("名字:", o2.name, " ", o2.id)
顺便看了一下简单的继承。
lua的这种方式对于C++程序员或许会感到有点不可思议,但是就单纯的使用方式来看,简单而功能强大。
lua的继承就是在对象里面使用如上的基函数创建一个基对象,然后来完善这个基对象再进行返回,就变成了一个继承的对象。
(lua没有基函数基对象这个说法吧,个人理解的,对C++程序员或许容易理解些)
function createRobot(name, id)
local obj = { name = name, id = id }
function obj:SetName(name)
self.name = name
end
function obj:GetName()
return self.name
end
function obj:GetId()
return self.id
end
return obj
end
function createFootballRobot(name,id, position)
local obj = createRobot(name, id)
obj.position = "right back"
function obj:SetPosition(p)
self.position = p
end
function obj:GetPosition()
return self.position
end
return obj
end