local heroInfo = {}
--直接打印 table的名字,就会输出该table的内存地址
print("表地址---------------",heroInfo)
--注意区别PrintInfo,PrintInfo2与TestSelf两个函数中self的不同
--有什么不?
heroInfo.PrintInfo = function(self, x)--这里的self仅是我们定义的普通参数,可以写成任何样子
print("PrintInfo-------------x=", x)
self.gender = "men"
print("gender=", heroInfo.gender) --输出 gender=men,为什么?
end
--定义函数时使用点号,self并不存在
heroInfo.PrintInfo2 = function(x)
print("PrintInfo2-------------self=", self, ",x=", x)
end
--定义函数时使用冒号,系统自动把表地址赋值给了self
function heroInfo:TestSelf(x)--注意,参数并没有写self
print("TestSelf--------------self=", self, ",x=", x)
self.name = "jim"
print("heroInfo.name=",heroInfo.name)
heroInfo.name = "none"
print("self.name=", self.name)
end
--函数调用
--使用冒号调用时,系统会自动把表地址传给函数的第一个参数,使用点号则不会
--这个参数可以写成self,也可以写成其它任何样子
--这类似于C++中的this指针
heroInfo:PrintInfo("hello")--改成点号调用测试下
heroInfo:PrintInfo2("hello", "world")--改成点号调用测试下
heroInfo:TestSelf(10)--改成点号调用测试下
--lua中table是一个引用型变量,就像C#中的数组,类对象
local self = heroInfo --从此以后ref与heroInfo就指向同一个表了
print("self.name=",self.name, "self.gender=",self.gender)
self.name = "monster"
self.gender = "unknown"
print("heroInfo.name=", heroInfo.name, "heroInfo.gender=", heroInfo.gender)