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

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])

原文链接 https://stackoverflow.com/questions/69878229

点赞
stackoverflow用户10915018
stackoverflow用户10915018

之所以会出错是因为你把 print(contents[2]) 写在了函数外面。 contents 只存在于函数内部。根据程序的其他部分,contents 并不存在,因此会抛出错误。没有全局变量 contents,错误提示说的是 12:,说明错误出现在第12行,而第12行正好是 print(contents[2])

2021-11-08 03:11:52
stackoverflow用户2858170
stackoverflow用户2858170

如何使内容全局化

函数参数 contents 局部于 func 函数且会隐藏同名变量在更大范围的作用域中。

全局变量名只是指向表 _G 中的字段。 所以在你的函数中你可以这样做:

_G.contents = contents

但通常你会尽量避免使用全局变量。

由于 func 返回 contents,所以可以这样做:

print(func({"content1", "content2", "content3"})[2])
2021-11-08 07:39:56
stackoverflow用户369792
stackoverflow用户369792

如果您的功能将始终使用全局变量,请创建全局变量,不要将其作为函数的参数:

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

function func()
  print(contents[1])
  print(#contents)
  return contents
end

func()
print(contents[2])

如果您确实希望具有全局变量,则建议重命名您的参数以避免混淆。由于这似乎只是一个样例,而且您的表似乎包含字符串,因此我将参数重命名为“strings”,并展示了您可以使用返回值或全局变量(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”以在模块的任何地方使用它:

local contents = {"content1", "content2", "content3"}
2021-11-08 16:28:26