代码“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 = ...
会将第二个值分配给 b
,local 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 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章