Lua中没有类的概念,但通过table function与元表可以模拟出具有类这样功能的结构
(1)简单对象的创建
table赋予对象属性,function赋予对象行为
--创建一个animal对象
animal = {name = "Tom",age = 5}
--为animal添加方法
animal.bark = function(voice)
print(animal.name.."在"..voice.."叫")
end
--也可以这样写
--创建一个animal对象
animal = {name = "Tom",age = 5,animal.bark = function(voice)
print(animal.name.."在"..voice.."叫")
end
}
这样使用会报错
--创建一个animal对象
animal = {name = "Tom",age = 5}
--为animal添加方法
animal.bark = function(voice)
print(animal.name.."在"..voice.."叫")
end
animal2 = animal
animal = nil
animal2.bark("wangwang")
结果
原因是这句中的
animal.bark = function(voice)
print(animal.name.."在"..voice.."叫")
end
animal.name空了
应当这样修改
--创建一个animal对象
animal = {name = "Tom",age = 5}
--为animal添加方法
animal.bark = function(self,voice)
print(self.name.."在"..voice.."叫")
end
animal2 = animal
animal = nil
animal2.bark(animal2,"wangwang")
运行结果
省略self的写法,用function声明,加 :
--创建一个animal对象
animal = {name = "Tom",age = 5}
--为animal添加方法
function animal:bark(voice)
print(self.name.."在"..voice.."叫")
end
animal2 = animal
animal = nil
animal2:bark("wangwang")