math - lua : pick a random parameter passed into it 中的简单函数

标签 math random parameters lua arguments

我很想拥有这样的功能:

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('#',...)), ...))

  1. ... 提供对函数中可变参数的访问
  2. select('#', ...) 返回在该 vararg 中传递的参数数量
  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 产生了类似的结果)。

关于math - lua : pick a random parameter passed into it 中的简单函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491151/

相关文章:

c# - 如何将此 VB.net/C# 代码移植到 Objective-C/iOS?

python - 列表(数组)中一定范围内的随机样本 | Python 3.x

Java:如何制定有效的机会方法

c++ - 如何将随机(boost.random)库包装在一个类中?

php - 具有一个或多个(多个)参数的搜索表单

c# - 为一个对象分配多个值(?)

algorithm - 以 O(1) 访问任意元素的随机递增序列?

c# - 如何使用 C# 舍入到最接近的 .5

c++ - 为带有参数的二进制文件运行 ldd

math - 为什么参数为 `atan2` “backwards” ?