我很想拥有这样的功能:
print(randomParameter(1,2,3))
-- prints 1 2 or 3... randomly picks a parameter
我尝试过使用 func(...) 参数,但是当我传递多个参数时我似乎无法使用表 ARG。我试过这个:
function hsv(...)
return arg[math.random(1,#arg)] -- also tried: return arg[math.random(#arg)]
end
print(hsv(5,32,7))
我什至尝试过使用 rand 函数将 #arg 放入一个变量中,还制作了一个 for 循环,依次添加一个变量来计算表格。仍然没有任何效果。
我记得前一段时间做过这个,它看起来和这个不一样。有人能帮忙吗?谢谢!
最佳答案
详细说明@EgorSkriptunoff 的回答(他需要改变在评论中提供答案的习惯;)):return (select(math.random(select('#',...)), ...))
。
...
提供对函数中可变参数的访问select('#', ...)
返回在该 vararg 中传递的参数数量math.random(select('#',...))
给你一个介于 1 和传递参数数量之间的随机数select(math.random(select('#',...)),...)
为您提供索引由传递的参数中的随机数指定的元素。
使用 arg = {...}
的另一种解决方案为您提供了几乎相同的结果,当包含 nil
时,与参数数量有关的细微差别作为参数之一:
> function f(...) print(#{...}, select('#', ...)) end
> f(1,2,3)
3 3
> f(1,2,nil)
2 3
> f(1,2,nil,3)
2 4
如您所见,select('#',...)
产生了更准确的结果(这是运行 LuaJIT,但据我所知,Lua 5.1 产生了类似的结果)。
关于math - lua : pick a random parameter passed into it 中的简单函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491151/