如何从 WoW 插件中的框架调用匿名函数?
How to call an anonymous function from a Frame in a WoW addon?
我正在使用发出许多匿名函数的代码生成器。我想我会尝试从框架中调用一个,但它似乎不起作用;我得到:
Date: 2020-09-18 18:42:27
ID: 1
Error occured in: Global
Count: 1
Message: [string "HelloWorldFrame:OnLoad"] line 1:
attempt to call global 'HelloWorld' (a nil value)
Debug:
[C]: HelloWorld()
[string "*:OnLoad"]:1:
[string "*:OnLoad"]:1
如果我更改以下内容:
local HelloWorld = function()
print("Hello, World!");
end
至:
function HelloWorld()
print("Hello, World!");
end
它会起作用。
这是我的 XML:
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\..\FrameXML\UI.xsd">
<Frame name="HelloWorldFrame">
<Scripts>
<OnLoad>
HelloWorld();
</OnLoad>
</Scripts>
</Frame>
</Ui>
这可能吗?
简短的回答是,如果您使用 XML,则需要使用全局变量。像这样
Lua
MyUniqueAddon = {}
function MyUniqueAddon:HelloWorld()
print("Hello, World!");
end
XML
<Frame name="HelloWorldFrame">
<Scripts>
<OnLoad>
MyUniqueAddon:HelloWorld();
</OnLoad>
</Scripts>
</Frame>
您也可以在 Lua
中完成所有操作
local function OnEvent(self, event)
print("Hello, World!");
end
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_ENTERING_WORLD")
f:SetScript("OnEvent", OnEvent)
或者在这种情况下,如果您只是想打印一些东西作为练习,则根本不使用框架
print("Hello, World!");
我正在使用发出许多匿名函数的代码生成器。我想我会尝试从框架中调用一个,但它似乎不起作用;我得到:
Date: 2020-09-18 18:42:27
ID: 1
Error occured in: Global
Count: 1
Message: [string "HelloWorldFrame:OnLoad"] line 1:
attempt to call global 'HelloWorld' (a nil value)
Debug:
[C]: HelloWorld()
[string "*:OnLoad"]:1:
[string "*:OnLoad"]:1
如果我更改以下内容:
local HelloWorld = function()
print("Hello, World!");
end
至:
function HelloWorld()
print("Hello, World!");
end
它会起作用。
这是我的 XML:
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\..\FrameXML\UI.xsd">
<Frame name="HelloWorldFrame">
<Scripts>
<OnLoad>
HelloWorld();
</OnLoad>
</Scripts>
</Frame>
</Ui>
这可能吗?
简短的回答是,如果您使用 XML,则需要使用全局变量。像这样
Lua
MyUniqueAddon = {}
function MyUniqueAddon:HelloWorld()
print("Hello, World!");
end
XML
<Frame name="HelloWorldFrame">
<Scripts>
<OnLoad>
MyUniqueAddon:HelloWorld();
</OnLoad>
</Scripts>
</Frame>
您也可以在 Lua
中完成所有操作local function OnEvent(self, event)
print("Hello, World!");
end
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_ENTERING_WORLD")
f:SetScript("OnEvent", OnEvent)
或者在这种情况下,如果您只是想打印一些东西作为练习,则根本不使用框架
print("Hello, World!");