What is “object = {…}” in lua good for?
我最近阅读了有关"魔兽世界"游戏的lua和附加组件的信息。由于插件的界面语言是lua,并且我想学习一种新语言,因此我认为这是一个好主意。
但是这是我不知道的一件事。在几乎每个插件中,最上面的这一行对我来说就像一个构造函数,该构造函数创建一个对象,我可以访问该对象。这行代码是这样的:
1 | object = {...} |
我知道,如果一个函数返回多个值(恕我直言,这对lua来说是一个巨大的优势),并且我不想将它们分别存储在多个值中,那么我可以编写
1 | myArray = {SomeFunction()} |
其中,
您已经回答了所有问题:
1 2 3 4 5 | function foo(a, b, ...) return {...} end foo(1, 2, 3, 4, 5) --> {3, 4, 5} |
基本上,
1 2 | local a, b, c = ... local d, e, f = some_function() |
请记住,这会影响性能,因此也许不要在每秒调用1000次的函数中使用它;)
编辑:
请注意,这确实不仅仅适用于"功能"。实际上,函数比其他任何东西更像是一种语法功能。在后台,Lua只知道块,这就是函数和
就代码而言,不同之处在于,使用函数可以在其代码之外指定其参数的名称,而使用文件可以将其指定为代码的最外层。没有"外部"文件。
幸运的是,当所有Lua文件作为一个块加载时,它们都是自动可变的,这意味着它们会获得
当在script.lua中调用类似
在您的示例中,它实际上非常相似。最有可能的是,您的脚本的其他地方装载了
想象一下以下情况:
1 2 3 4 5 6 | function foo(a, b) print(b) print(a) end foo('hello', 'world') |
这几乎等同于
1 2 3 4 5 6 7 | function foo(...) local a, b = ... print(b) print(a) end foo('hello', 'world') |
与
相等的是100%(可能在性能上除外)
1 2 3 4 5 6 7 8 | -- Note that [[ string ]] is just a convenient syntax for multiline"strings" foo = load([[ local a, b = ... print(b) print(a) ]]) foo('hello', 'world') |
在Lua 5.1参考手册中,{...}表示传递给程序的参数。在您的情况下,这些可能是从游戏传递到插件的参数。
您可以在此问题和此线程中看到对此的引用。
在文件的开头放置以下文本:
1 2 3 4 | local args = {...} for __, arg in ipairs(args) do print(arg) end |
它揭示了:
- args [1]是插件的名称
- args [2]是一个(空)表,通过引用传递给同一插件中的所有文件
插入到args [2]的信息因此可用于其他文件。