Lua中将table作为函数参数传递且table需在函数内部创建的实现问题
你提供的参考代码无法输出预期内容,原因是函数内部第一行contents = {}直接覆盖了外部传入的table参数,不管调用时传入什么内容,最终操作的都是新创建的空表,因此table.concat的输出为空。
如果你要求contents表必须在函数内部作用域创建,同时调用函数时可以直接传入字符串不需要手动构造table,可以用Lua可变参数特性实现,代码如下:
-- 函数定义 function func(...) -- *contents表完全在函数内部作用域创建*,接收所有传入的字符串参数 local contents = {...} print(table.concat(contents, ' ')) end -- 调用时直接传入字符串即可,无需手动构造table func('content1', 'content2', 'content3')
执行上述代码输出结果为:content1 content2 content3,符合预期。
如果你需要保留调用时传入table字面量的写法,同时要求内部创建contents表做数据拷贝、不修改外部原始数据,也可以用如下实现:
function func(origin_contents) -- 内部创建新的contents表,复制传入的table内容 local contents = {} for _, v in ipairs(origin_contents) do table.insert(contents, v) end print(table.concat(contents, ' ')) end -- 调用时传入构造好的table字面量 func({'content1', 'content2', 'content3'})
内容的提问来源于stack exchange,提问作者user16999379
相关产品推荐
相关产品推荐

