Ian*_*oyd 0 lua world-of-warcraft
我正在阅读Lua代码文件,文件的顶部包含:
1 | TradeSkillFrameReset = TradeSkillFrame_LoadUI;
2 |
3 | TradeSkillFrame_LoadUI = function()
4 | TradeSkillFrameReset();
...
112| TradeSkillFrame_LoadUI = TradeSkillFrameReset;
...
114| end;
他们正在完成任务的第一行:
TradeSkillFrameReset = TradeSkillFrame_LoadUI;
Run Code Online (Sandbox Code Playgroud)
此时,在代码文件中,它们将未声明的标识符(TradeSkillFrame_LoadUI)分配给未声明的变量(TradeSkillFrameReset).这是允许在Lua?
更令人困惑的是,第一个TradeSkillFrame_LoadUI似乎做的就是召唤自己:
TradeSkillFrame_LoadUI = function()
TradeSkillFrameReset();
Run Code Online (Sandbox Code Playgroud)
这怎么不是无限循环?
编辑:添加对TradeSkillFrameReset和的剩余引用TradeSkillFrame_LoadUI.
如果TradeSkillFrame_LoadUI是全局函数,则第一个语句将捕获此函数TradeSkillFrameReset.
然后,分配TradeSkillFrame_LoadUI将全局函数替换为新函数,该函数首先通过TradeSkillFrameReset引用调用原始函数.
这种模式称为"函数挂钩",这里有一些关于一般技术和一些魔兽世界Lua环境特定细节的更多信息(这个脚本可能来自哪里,根据函数的名称)
一些示例代码,以明确这一点:
function SomeGlobalFunction()
print("I'm the original global function")
end
OrigFunction = SomeGlobalFunction
SomeGlobalFunction = function()
OrigFunction()
print("And here's the modfied one...")
end
--...
SomeGlobalFunction()
Run Code Online (Sandbox Code Playgroud)
这将打印以下输出:
我是最初的全球职能部门
这是修改过的......
作为旁注,Lua的名字并非全部大写.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |