提问人:Luc Riffault 提问时间:11/8/2023 最后编辑:Luc Riffault 更新时间:11/9/2023 访问量:56
通过 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
问:
我有一个脚本,它使用文件名作为参数,以便播放写在文件每一行上的音符。我正在尝试编写一个脚本,该脚本将根据输入使用各种参数运行,但是全局参数表不会包含我分配的参数play.lua
jukebox.lua
play.lua
loadfile
播放.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.lua
lua play.lua file1
print(".")
dofile
require
我的问题是:在脚本中编写与在控制台中编写不同吗?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 独立解释器既将命令行参数放入全局参数中,又将它们传递给它调用的块。换句话说,当你这样做时,会发生这样的事情:arg
lua play.lua file1
arg = {"file1"}
assert(loadfile("play.lua"))("file1")
然后,脚本可以使用 varargs 语法或全局语法来访问它们。你使用后者。 给出错误,因为它只设置了前者。 没有做任何事情,因为它只是加载块,而不是实际调用它。添加一组额外的空括号,即 ,将解决这个问题,并结合 你的设置 ,将使其工作。...
arg
play.lua
assert(loadfile("play.lua"))("file1")
assert(loadfile("play.lua"))
assert(loadfile("play.lua")()
arg[1]
评论
arg[1] = "file1"
arg
local
arg
...
评论
local name = "file " .. arg[1]
local arg = {...}; local name = "file " .. arg[1]