Lua函数返回table参数后仍无法在外部访问打印的问题
问题原因
报错是Lua变量作用域规则导致的:
- 函数
func的入参contents是函数内部的局部变量,仅在func的代码块范围内生效,函数执行结束后该局部变量会被销毁,全局环境中不存在名为contents的变量,因此最后一行尝试访问全局contents就会抛出attempt to index global 'contents' (a nil value)的错误。 - 你编写的代码中
func已经将入参table作为返回值返回,但调用函数时没有用变量接收该返回值,因此无法在函数外部获取到传入的table数据。
修复方案
推荐使用外部变量接收函数返回值的方案,避免污染全局命名空间:
function func(contents) print(contents[1]) -- 函数内部正常访问局部变量,输出content1 return contents end -- 用外部变量接收返回的table local res = func({"content1", "content2", "content3"}) print(res[2]) -- 正常输出content2
如果确实需要在全局环境使用contents变量,可以主动将局部变量赋值到全局空间(不推荐):
function func(contents) _G.contents = contents -- 赋值到全局环境 print(contents[1]) return contents end func({"content1", "content2", "content3"}) print(contents[2]) -- 正常输出content2
内容的提问来源于stack exchange,提问作者user16999379
相关产品推荐
相关产品推荐

