Lua初学习 9-13_04 模拟C#属性器 ,闭合函数

Lua代码:

human = {
age = 0,
__newindex = function (t,k,v)
 if(k == "age") then
 print("age 变化了")
 human.age = v
 else
 print("其他属性变化了")
 end
end
}

coco = {
--age = 0
}

setmetatable(coco,human)
human.__index = human

--当改变coco里面的属性时候,会调用元表里面元方法__newindex,就像调了C#属性器
--给coco.age赋值的时候,调了元表里面的元方法,在元方法里面给父类.age赋值
--当我们get coco.age属性时候,又会调元表里面的元方法__index,拿到父类的age

coco.age = 0
print(coco.age)
coco.age = 1
print(coco.age)
coco.age = 2
print(coco.age)
coco.name = "zz"

===================debug===============

age 变化了
0
age 变化了
1
age 变化了
2
其他属性变化了

 

总结一下:怎么感觉Lua里面的 __index 和 _newindex 有点像C#里面的属性器  get set 方法,但是Lua里面得给父类重写__index 和 _newindex方法 

 

2:闭合函数:(跟C#里面的匿名函数那些差不多)     

function Test()
  print("enter Test")
  return function(n) return n*2 end --->func 需要传参数
end

print(Test()(11)) -----> enter Test    22

============================================

function Test(n)
print("enter Test")
return function() return n*2 end   --->func 不需要传参数  直接使用Test方法传进来的参数  闭包
end

print(Test(11)())