【问题标题】:WOW addons, Lua, the meaning of T in local _, T =WOW插件,Lua,T在本地_的意思,T=
【发布时间】:2021-04-23 08:58:05
【问题描述】:

最近,我正在尝试查看一个名为 VenturePlan 的 WOW 插件,该插件会计算您的命令表任务的结果。

这是一个简单的插件,几乎是纯 '.lua' 文件。它们是'Collector.lua'、'Loader.lua'、'MissionList.lua'、'MissionView.lua'、'VenturePlan.toc'、'vs-spells.lua'、'vs.lua'、'Widgets.lua ', 'Libs/Evie.lua'。

我有一点编程知识,比如python和c。但我还没有为 WOW 编写插件。我在这个插件的一开始就卡住了。

几乎每个文件都有一段代码

local _, T = ...
local EV = T.Evie

据我了解,最开始的那些代码通常是一些变量声明或模块导入。在这里,似乎作者向“T”传递了一些值,但我不知道这是在哪里发生的,它甚至不是一个可调用的函数,它在一个 .lua 文件中。

另外,我找不到入口点。似乎“Loader.lua”会先加载,但它永远不会返回任何有趣的东西。

那么,“T”从何而来?它的结构是什么,在哪里定义的?

插件在这里https://www.townlong-yak.com/addons/venture-plan

【问题讨论】:

    标签: lua add-on world-of-warcraft


    【解决方案1】:

    文件中的 Lua 块作为函数加载。 WoW 将调用那些提供两个参数的函数。第一个参数是插件的名称,第二个参数是在插件的所有文件之间共享的表。 这样您就不必使用全局环境在文件之间共享数据。

    local _, T = ... 会将这两个参数存储在两个局部变量中。 _ 通常用于命名未使用的变量。例如,luacheck 不会对名为 _ 的未使用变量发出警告

    print(_, T) 在所有这些文件中,您应该得到相同的字符串和表格。

    【讨论】:

    • 感谢您的回答!我目前了解您的描述~
    【解决方案2】:

    WoW 似乎会用 C lua_load/luaL_dostring/luaL_dofile 或 Lua loadstring/loadfile 打开那些 *.lua 文件;他们将 Lua 代码转换为函数。 ... 是可变参数函数的参数列表;多重赋值 local _, T = ... 意味着 _ 是传递给函数的第一个参数,T 是第二个。

    对于这种执行 Lua 代码来说,返回并不是真正必要的。它可以通过更改接收到的参数来发回数据,因为表是通过引用传递的;以及全局变量。

    【讨论】:

    • 感谢您的回答。但是,我想知道,是否有一个地方可以定义 T 的内容?或者它们在所有 WOW 插件中都相同?我的意思是,既然 WOW 客户端向这个插件发送了一些值,我怎么知道 T 是什么?
    • 是的,我想,WoW 调用这些 Lua 文件向它们传递参数,T 是第二个;所以T 从外部来到插件。
    • 我认为@Piglet 给出了关于'T'的正确答案,这是一个空表作为数据共享的空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2021-11-16
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多