代码“local a = (...);”是啥意思in a required script 是啥意思?

Posted

技术标签:

【中文标题】代码“local a = (...);”是啥意思in a required script 是啥意思?【英文标题】:What does the code "local a = (...);" in a required script mean?代码“local a = (...);”是什么意思in a required script 是什么意思? 【发布时间】:2015-01-03 19:29:04 【问题描述】:

在 Lua 文件中,我得到以下代码:

local mod_name = (...);

我尝试了代码print(mod_name),得到了文件名"pb"。 整个脚本由require('pb'); 从另一个脚本调用。 我知道(...) 在函数中用于多个参数的含义,但我对此感到困惑。

【问题讨论】:

什么是“module(...);”什么意思? Lua 中的 BTW 分号是可选的。 (在它们分隔标识符和关键字的地方,它们可以用空格代替。) 【参考方案1】:

... 表示参数列表,可以是块(例如脚本)或声明为function (named_arg_1, named_arg_2, ...)function (...) 的函数。

列表可以连接到列表,如1, 2, ...print("args:",...)。在这些示例中,它用于列表的上下文中。否则,它仅扩展到第一个值。

local a = (...) 中,由于括号构成表达式,上下文不是列表。因此,它为a 分配了第一个值。

括号似乎是风格的,因为尽管local a = ... 有一个列表上下文,a 仍然被分配了第一个值。其他示例:local a, b = ... 会将第二个值分配给 blocal a, b = (...) 会将 nil 分配给 b


由此可知,module(...) 将模块持有的值作为函数调用,其参数列表从... 列表扩展而来。

【讨论】:

谢谢!脚本是从“require('test');”调用的,没有参数了,“...”怎么能不为nil呢? 因为require 将其参数传递给加载的块。见here。另请注意,后来的 Lua 版本添加了额外的参数,因此最好像这样调用 module 函数:module( (...) ),这样额外的参数就不会意外传递给 module 谢谢!!我已经测试过了,就在我发现我的测试代码中有一些错误之前。谢谢你的帮助!!【参考方案2】:

在脚本的主体中,... 生成脚本的参数。它与arg 表的功能相同,参见Lua Standalone 参考手册。

for _, v in ipairs... do
    print(v)
end

例如,如果使用test.lua arg1 arg2 调用它,则会输出:

arg1
arg2

请注意,在您的local mod_name = (...) 中,由于括号,仅保留了第一个元素。


在您的示例中,该脚本是使用 require('pb') 从另一个脚本调用的。在这种情况下,它加载了两个参数,第一个是模块名称'pb',第二个取决于require 是如何获取加载器的。详情请阅读require的手册。

【讨论】:

但在我的例子中,脚本没有参数,只有“require('test');”。所以“...”应该为零,对吧? @RoyHu 为什么不在问题中说明这一点? Create a Minimal, Complete, and Verifiable example. 知道了,非常感谢!

以上是关于代码“local a = (...);”是啥意思in a required script 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

这段代码中的“<+”是啥意思? [复制]

这段代码是啥意思?

for(;i<=m;i++) 是啥意思? [复制]

linux中的magic number是啥意思

JSLint 的“语句位置出现意外的表达式‘i’”是啥意思?

NiO?是啥