将 Lua 表格解包为对象并将它们映射为函数的参数

我正在寻找一种方法来解包 Lua 表格(对象,而不是数组)并将返回值映射为函数的参数。 示例:

local function f(a, b, c, d)
    print(a, b, c, d)
end

-- 排序被故意打乱
local object_to_unpack = {
    a = 1,
    c = 42,
    d = 18,
    b = 102
}

所以我正在寻找一种像这样的方法 f(unpack_and_map(object_to_unpack)) 并且希望函数输出 1, 102, 42, 18。 我知道 unpack 函数,但它只适用于数组,不适用于对象,并且我没有任何排序保证(如 object_to_unpack 中所示)。

点赞
用户2858170
用户2858170

不确定为什么你要拆开那个表格而不直接将它作为函数参数使用。

local someTable = {
  a = 1,
  c = 42,
  d = 18,
  b = 102,
}

local function f(t)
  print(t.a, t.b, t.c, t.d)
end

f(someTable)

如果你坚持使用一个表达式列表来调用 f,那么你需要创建一个这样的列表。

function f(...)
  print(...)
end

local args = {}
for _, v in pairs(someTable) do
  table.insert(args, v)
end

f(table.unpack(args))

这并不能保证任何顺序。如果你想要按键排序的列表,那么在调用 f 之前需要对该列表进行排序。

local keys = {}
for k in pairs(someTable) do
  table.insert(keys, k)
end
table.sort(keys)
local args = {}
for _, key in ipairs(keys) do
  table.insert(args, someTable[key])
end

f(table.unpack(args))
2021-03-26 10:04:29