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

Posted

技术标签:

【中文标题】即使返回也无法在函数外打印函数的参数【英文标题】:Unable to print a function's parameter outside function even when returned 【发布时间】:2021-12-20 23:36:16 【问题描述】:

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 = func("content1", "content2", "content3") 【参考方案1】:

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

contents = "content1", "content2", "content3"

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

func()
print(contents[2])

如果您确实想要一个全局变量,我建议您重命名您的参数以避免混淆。由于这似乎只是一个示例,并且您的表似乎包含字符串,因此我将重命名参数“字符串”并显示您可以使用返回值或全局变量 (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"

【讨论】:

感谢您的回答。然而,与使用表 _G 时如何简单地设置全局参数相比,这似乎有点过于夸张了【参考方案2】:

如何使内容全球化

函数参数contentsfunc 的局部变量,并且在更大范围内隐藏任何名为contents 的变量。

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

_G.contents = contents

但通常您会尽可能避免使用全局变量。

就像func 返回contents 一样

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

【讨论】:

【参考方案3】:

这是因为您在函数之外有print(contents[2])contents 仅适用于该函数。根据程序的其余部分,contents 不存在,因此它会引发错误。没有全局变量contents,它说12:,它告诉你错误在第12行,这又是print(contents[2])

【讨论】:

以上是关于即使返回也无法在函数外打印函数的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在oracle plsql中提取和打印函数外的光标值

全面解读php-函数

无法在 C 中打印返回数组指针的函数的输出

如何返回一个 char 数组并在 main 中打印它?

quick lua 能用printf函数打印吗

无法在 C 中打印用户定义的函数