Lua 的简单函数:从传递给它的参数中随机选择一个。

我希望有这样的功能:

print(randomParameter(1,2,3))
-- 随机选择一个参数,输出 1、2 或 3

我尝试使用 func(...) 参数,但当传递多个参数时,似乎无法使用 ARG 表。我尝试了以下方法:

function hsv(...)
  return arg[math.random(1,#arg)] -- 也尝试:return arg[math.random(#arg)]
end

print(hsv(5,32,7))

我甚至尝试使用 rand 函数将 #arg 放入变量中,还制作了一个 for 循环,连续添加变量来计数表格。但仍然无法工作。

我记得之前做过这个,但看起来不同。有人能帮忙吗?谢谢!

点赞
用户1442917
用户1442917

稍微解释一下@EgorSkriptunoff的答案(他需要改变他在评论中提供答案的习惯):return (select(math.random(select('#',...)),...))

  1. ...允许函数中访问可变参数
  2. select('#',...)返回传入可变参数的数量
  3. math.random(select('#',...))给出一个介于1和传入参数数量之间的随机数
  4. 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产生类似的结果)。

2014-02-01 07:06:39
用户793615
用户793615
function randomNumber(...)
    t = {...}
    return t[math.random(1,#t)]
end

print(randomNumber(1, 5, 2, 9))

输出:

> 1 or 5 or 2 or 9

功能: 通过在传入的可变参数范围内随机选取一个数并返回。

实现: 将传入的可变参数存储在一个表中(t),然后通过math.random函数生成一个随机索引,最后返回表中对应的值。

2014-02-02 22:18:10