WOW插件,Lua,T在本地的含义_,T=
WOW addons, Lua, the meaning of T in local _, T =
最近,我正在尝试浏览一个名为 VenturePlan 的 WOW 插件,它会计算您的命令 table 任务的结果。
这是一个简单的插件,几乎包含纯“.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' 将首先加载,但它永远不会 return 任何有趣的东西。
那么,'T' 是从哪里来的呢?它的结构是什么,定义在哪里?
WoW 似乎会用 C lua_load
/luaL_dostring
/luaL_dofile
或 Lua loadstring
打开那些 *.lua 文件/loadfile
;他们将 Lua 代码转换为函数。 ...
是可变参数函数的参数列表;多重赋值 local _, T = ...
意味着 _
是传递给函数的第一个参数,而 T
是第二个。
Return 对于这种执行 Lua 代码并不是真正必要的。它可以通过更改接收到的参数来发回数据,因为表是通过引用传递的;以及全局变量。
Lua 文件中的块作为函数加载。 WoW 将调用那些提供两个参数的函数。第一个参数是插件的名称,第二个参数是插件的所有文件共享的 table。
这样您就不必使用全局环境在文件之间共享数据。
local _, T = ...
会将这两个参数存储在两个局部变量中。 _
通常用于命名未使用的变量。例如,luacheck 不会对名为 _
的未使用变量发出警告
print(_, T)
在所有这些文件中,你应该得到相同的字符串和 table.
lua结果栈的简单使用示例。
function stack_results()
return 1, 2, 3, 4, 5, 6, 7, 8, 9
end
-- skip 1st, then get 2nd result, then skip 2 results and get 5th result
-- calling stack_results function
local _, a, _, _, b = stack_results()
-- result will be 2, 5
print("Result: ", a, b)
Result: 2 5
最近,我正在尝试浏览一个名为 VenturePlan 的 WOW 插件,它会计算您的命令 table 任务的结果。
这是一个简单的插件,几乎包含纯“.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' 将首先加载,但它永远不会 return 任何有趣的东西。
那么,'T' 是从哪里来的呢?它的结构是什么,定义在哪里?
WoW 似乎会用 C lua_load
/luaL_dostring
/luaL_dofile
或 Lua loadstring
打开那些 *.lua 文件/loadfile
;他们将 Lua 代码转换为函数。 ...
是可变参数函数的参数列表;多重赋值 local _, T = ...
意味着 _
是传递给函数的第一个参数,而 T
是第二个。
Return 对于这种执行 Lua 代码并不是真正必要的。它可以通过更改接收到的参数来发回数据,因为表是通过引用传递的;以及全局变量。
Lua 文件中的块作为函数加载。 WoW 将调用那些提供两个参数的函数。第一个参数是插件的名称,第二个参数是插件的所有文件共享的 table。 这样您就不必使用全局环境在文件之间共享数据。
local _, T = ...
会将这两个参数存储在两个局部变量中。 _
通常用于命名未使用的变量。例如,luacheck 不会对名为 _
print(_, T)
在所有这些文件中,你应该得到相同的字符串和 table.
lua结果栈的简单使用示例。
function stack_results()
return 1, 2, 3, 4, 5, 6, 7, 8, 9
end
-- skip 1st, then get 2nd result, then skip 2 results and get 5th result
-- calling stack_results function
local _, a, _, _, b = stack_results()
-- result will be 2, 5
print("Result: ", a, b)
Result: 2 5