Lua函数:如何使用表作为函数参数并自我记录代码

3
当我有许多参数的函数时,有时将单个表格作为参数传递而不是许多本地变量会很有用。
function example_1(arg_one, arg_two, arg_three)
end

变得

function example_2(arg_table)
    arg_table.arg_one, arg_table.arg_two, arg_table.arg_three
end


问题在于,当在代码中的其他位置调用该函数时,很难记住arg_table需要包含哪些内容。虽然有许多编辑器的代码补全插件可以帮助您记住example_1函数的参数,但却无法为example_2函数提供帮助。
有没有一种方法可以编写具有表参数的example_2函数,以便它仍然是一个表,但也显示了()内部函数所需的必要参数?
类似于这样(不起作用):
function example_2(arg_table = {arg_one, arg_two, arg_three})

end

请在您的函数开头添加 assert(arg_table.arg_one ~= nil and arg_table.arg_two ~= nil and arg_table.arg_three ~= nil) - Egor Skriptunoff
4
为什么不在调用函数时解包表格并保留函数参数? - Felix
2个回答

1

按照惯例,编写您的正式参数列表和文档。然后记录,如果第一个(且唯一)实际参数是表,则将使用形式参数名称作为字符串键从表中获取有效参数。


在实现中,这是我极少数会更改传入参数值的情况之一:arg_one,arg_two = arg_one.arg_one,arg_one.arg_two - Tom Blodget

0

您可以保留函数参数不变,并为方便起见传递一个表格。

例如:

function example(arg_one, arg_two, arg_three)
    -- do stuff
end

local tbl = {"value for arg_one", "value for arg_two", "value for arg_three"}
example(table.unpack(tbl))

请注意,这对具有命名键的表无效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接