如何在WoW插件中从一个Frame中调用一个匿名函数?

我正在使用一个生成器,它会生成许多匿名函数。我想尝试从Frame中调用其中的一个,但好像不起作用; 我得到如下错误:

日期:2020-09-18 18:42:27
ID:1
出现错误:Global
计数:1
消息:[string "HelloWorldFrame:OnLoad"]第1行:
   尝试调用全局变量'HelloWorld'(一个空值)
调试:
   [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>

这样可行吗?

点赞
用户1297035
用户1297035

短话长说,如果你使用 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!");
2020-09-19 03:05:54