<6>Lua元表和冒号 self
Lua中没有像C、C++、JAVA中的类概念,面向对象等 ,但我们可以模拟出来
1. Lua中有个很重要的概念元表
设置元表setmetatable()函数 获取元表getmetatable()函数
例子如下:
元表中有个很重要的Key __index
代码:
local Person = {
__index = {
name = "jadeshu",
age = 28,
sex = 0,
}
} --表
local man = {} --表
setmetatable(man,Person) --设置元表
--man的元表是Person
--测试
print(man.name) --显示 jadeshu
---即如果在表里面找不到的key,Lua解释器在元表里面的__index表里进行查找;
2. 冒号和self
冒号 (:) 多了个self机制,增加了实例传递,如下
代码如下
local Person = {}
function Person:getName()
print("call Person:getName()",self)
end
--当调用函数时,会传递self
--self指的是Person这个实例表
Person:getName() --call Person:getName() table:006D76B8
--注意区别.
function Person.getAge()
print("call Person:getAge()",self)
end
Person.getAge() --call Person:getAge() nil
--冒号相当于点号如下操作
function Person.getSex(person)
print("call Person:getSex()",person)
end
Person.getSex(Person) --call Person:getSex() table:006D76B8