<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

 

 

 

 

posted @ 2018-04-08 00:19  jadeshu  阅读(245)  评论(0编辑  收藏  举报