通过 Assert(LoadFile(play.lua))(argument) 传递参数不会在 Play 中为 arg[1] 分配任何内容.lua

passing an argument through assert(loadfile(play.lua))(argument) doesnt assign anything to arg[1] inside play.lua

提问人:Luc Riffault 提问时间:11/8/2023 最后编辑:Luc Riffault 更新时间:11/9/2023 访问量:56

问:

我有一个脚本,它使用文件名作为参数,以便播放写在文件每一行上的音符。我正在尝试编写一个脚本,该脚本将根据输入使用各种参数运行,但是全局参数表不会包含我分配的参数play.luajukebox.luaplay.lualoadfile

播放.lua(出错的部分)

local name = "file " .. arg[1]

for line in io.lines(arg[1]) do
--[[note playing code]]--
print(".")
  end

我的第一次尝试看起来像这样,但是在尝试分配给变量时会返回一个错误,说是 nil 值arg[1]arg[1]play.lua

自动点唱机.lua

assert(loadfile("play.lua"))("file1")

然后我尝试分配arg[1]jukebox.lua

arg[1] = "file1"
assert(loadfile("play.lua")

这将运行代码,没有错误,但使用 将不播放任何内容,也不打印任何内容,而将正常播放文件,并且将用于文件 file1 中的每一行。 我也尝试过,结果也差不多lua jukebox.lualua play.lua file1print(".")dofilerequire

我的问题是:在脚本中编写与在控制台中编写不同吗?assert(loadfile("play.lua"))("file1")lua play.lua file1

编辑:我用下面提供的全部代码制作了一个新的脚本play1.lua。

播放 .lua

local name = "file " .. arg[1]

for line in io.lines(arg[1]) do
print(".")
  end

自动点唱机.lua

arg[1] = "file1"
assert(loadfile("play.lua"))()
lua 参数传递

评论

0赞 ESkri 11/8/2023
替换为local name = "file " .. arg[1]local arg = {...}; local name = "file " .. arg[1]

答:

1赞 Joseph Sible-Reinstate Monica 11/8/2023 #1

Lua 独立解释器既将命令行参数放入全局参数中,又将它们传递给它调用的块。换句话说,当你这样做时,会发生这样的事情:arglua play.lua file1

arg = {"file1"}
assert(loadfile("play.lua"))("file1")

然后,脚本可以使用 varargs 语法或全局语法来访问它们。你使用后者。 给出错误,因为它只设置了前者。 没有做任何事情,因为它只是加载块,而不是实际调用它。添加一组额外的空括号,即 ,将解决这个问题,并结合 你的设置 ,将使其工作。...argplay.luaassert(loadfile("play.lua"))("file1")assert(loadfile("play.lua"))assert(loadfile("play.lua")()arg[1]

评论

0赞 Luc Riffault 11/8/2023
添加 () 并设置后,使用 Jukebox.lua 时我仍然得到 arg[1] 是 nil 值arg[1] = "file1"
0赞 Joseph Sible-Reinstate Monica 11/8/2023
@LucRiffault 你确定你没有不小心声明一个新的吗?在最近一次尝试中,您可以编辑您的问题以包含两个文件的确切内容吗?arglocal
0赞 Luc Riffault 11/9/2023
编辑,甚至制作了一个新脚本,除了上面的代码之外别无他物,以确保或没有在其他任何地方使用。arg...
1赞 Luc Riffault 11/9/2023
我想我发现了问题所在,它似乎出在我的口译员身上。我不确定我使用的控制台与在 linux 上使用 lua 有何不同,但是当我在 linux 上尝试使用您的代码时,它运行良好。我可能会把我的问题带到一个更具体的论坛上,以我的应用程序。无论如何,我学到了很多关于运行脚本时 arg[] 发生的事情,我非常感谢您的解释。
0赞 Joseph Sible-Reinstate Monica 11/9/2023
@LucRiffault呵呵,这很奇怪。您使用的平台是什么?