我有一个函数,它将可变数量的int作为参数。
thisFunction(1,1,1,2,2,2,2,3,4,4,7,4,2)
这个函数是在一个框架中给出的,我宁愿不改变函数的代码或它来自的.lua。所以我想要一个函数,为我重复一定数量的次数,这样就不那么重复了。可以像这样工作并实现上面所做的事情
thisFunction(repeatNum(1,3),repeatNum(2,4),3,repeatNum(4,2),7,4,2)
这可能在Lua吗?我对这样的事情感到很满意:
thisFunction(repeatNum(1,3,2,4,3,1,4,2,7,1,4,1,2,1))
答案 0 :(得分:3)
我认为你坚持使用第二个提出的解决方案,即
thisFunction(repeatNum(1,3,2,4,3,1,4,2,7,1,4,1,2,1))
因为如果使用在列表中间返回多个值的函数,则会对其进行调整,使其仅返回一个值。但是,在列表的末尾,该函数没有调整其返回值。
您可以按如下方式对repeatNum
进行编码。它没有经过优化,也没有错误检查。这适用于Lua 5.1。如果您使用的是5.2,则需要进行调整。
function repeatNum(...)
local results = {}
local n = #{...}
for i = 1,n,2 do
local val = select(i, ...)
local reps = select(i+1, ...)
for j = 1,reps do
table.insert(results, val)
end
end
return unpack(results)
end
我没有在此计算机上安装5.2,但我相信您需要的唯一更改是将unpack
替换为table.unpack
。
答案 1 :(得分:1)
我意识到这个问题已得到解答,但我从可读性的角度来看,如果使用表格来标记重复会更清楚,当然它的效率可能会低得多。
function repeatnum(...)
local i = 0
local t = {...}
local tblO = {}
for j,v in ipairs(t) do
if type(v) == 'table' then
for k = 1,v[2] do
i = i + 1
tblO[i] = v[1]
end
else
i = i + 1
tblO[i] = v
end
end
return unpack(tblO)
end
print(repeatnum({1,3},{2,4},3,{4,2},7,4,2))