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)())