现在假设我有一个模块
second.lua
local second = {}
function second:funcA( ... )
self.secondNum = 5
end
return second
然后再写一个模块引用second.lua
first.lua
local second = require("second")
local first={}
function first:funcB( ... )
second:funcA()
print(self.firstNum)
print(self.secondNum)
print(first.firstNum)
print(first.secondNum)
print(second.firstNum)
print(second.secondNum)
end
first.firstNum = 5
first:funcB()
return q
第一次我们调用模块second.lua中的funcA使用second:funcA()的方式
此时三个打印结果如下图
由打印结果:
1、此时函数first:funcB()中的self是指对象first,因为first有firstNum这个变量,所以self.firstNum打印出5。
但是因为没有secondNum这个变量,所以self.secondNum打印出nil;
即first.secondNum也打印出nil
2、执行second:funcA()这段代码时传递的self却是second(意思在模块second.lua中函数funcA ( )中的self是second),生成了self.secondNum(就是second.secondNum)这个数据,所以second.secondNum打印出5。
因为second没有firstNum这个变量,所以second.firstNum打印出nil。
local second = require("second")
local first={}
function first:funcB( ... )
second.funcA(self)
print(self.firstNum)
print(self.secondNum)
print(first.firstNum)
print(first.secondNum)
print(second.firstNum)
print(second.secondNum)
end
first.firstNum = 5
first:funcB()
return first
稍微修改一下,此时通过second.funcA(self)这样手动传递self的方式调用。
打印结果如下
此时可以看出self.firstNum和self.secondNum打印结果是5
first.firstNum和first.secondNum都能打印结果都是5,
而second.firstNum和second.secondNum打印结果都是nil;
得出结论此时函数first:funcB()中的self依旧是first,所以self.firstNum结果是5
同时因为second.funcA(self)手动传递的是self(就是first)所以first.secondNum的结果也是5,同样self.secondNum也能打印出5;
而second.firstNum和second.secondNum都是nil值;