【问题标题】:Lua functions: how to use tables as function arguments and self-document the codeLua 函数:如何使用表作为函数参数和自记录代码
【发布时间】:2019-09-05 21:12:57
【问题描述】:

当我的函数接受许多参数时,有时将单个表作为参数而不是许多局部变量传递是有用的。

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)开始你的函数
  • 在调用函数的时候为什么不直接解包,保留函数参数呢?

标签: lua


【解决方案1】:

像往常一样,用单独的参数编写您的形式参数列表和文档。然后记录如果第一个(也是唯一的)实际参数是一个表,则有效参数将从表中获取,使用形式参数名称作为字符串键。

【讨论】:

  • 而且,在实现中,这是我会更改传入参数值的少数情况之一:arg_one, arg_two = arg_one.arg_one, arg_one.arg_two
【解决方案2】:

您可以保持函数参数不变并传递一个表格以方便使用。

例如:

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

请注意,这不适用于具有命名键的表。

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 2019-07-18
    • 2013-07-13
    • 1970-01-01
    • 2023-03-09
    • 2017-06-05
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多