即使返回也无法在函数外部打印函数的参数



Contents是作为函数func的参数传递的表。问题是我无法从表contents中打印出任何值。例如,你可以看到我试图打印表contents中的第二个值,但我得到了这个错误12: attempt to index global 'contents' (a nil value)

function func(contents)
print(contents[1])
return contents
end
func({"content1", "content2", "content3"})
print(contents[2])

如果函数总是使用全局变量,请创建全局变量,不要将其作为函数的参数:

contents = {"content1", "content2", "content3"}
function func()
print(contents[1])
print(#contents)
return contents
end
func()
print(contents[2])

如果你确实想要一个全局变量,我建议你重新命名你的论点,以避免混淆。由于这似乎只是一个示例,并且您的表似乎包含字符串,我将重命名参数"string",并显示您可以使用返回值或全局变量(repl.it(:

contents = {"content1", "content2", "content3"}
function func(strings)
print(strings[1])
print(#strings)
return strings
end
local result = func(contents)
print(contents[2])
print(result[2])

使用全局变量是不受欢迎的,你可以把它放在模块的本地,并通过把"本地"放在前面在模块的任何地方使用它:

local contents = {"content1", "content2", "content3"}

如何使内容成为全局

函数参数contentsfunc的本地参数,并且在更大的范围内遮蔽任何名为contents的变量。

全局变量名只是指_G表中的一个字段。所以在你的功能中,你可以做

_G.contents = contents

但通常情况下,尽可能避免使用全局变量。

func返回contents时,只需执行

print(func({"content1", "content2", "content3"})[2])

这是因为函数之外有print(contents[2])contents仅对函数是本地的。根据程序的其余部分,contents不存在,因此它抛出了一个错误。没有全局变量contents,它说的是12:,这告诉您错误在第12行,第12行又有print(contents[2])

最新更新