如何在Ruby中获得一个随机数-rand()方法

733 阅读1分钟

rand()方法

Ruby的rand 方法属于内核模块。这意味着你可以在任何Ruby的环境中使用它。

例如,如果你想模拟掷骰子,你可以写 :

rand(1..6)
# => 4
rand(1..6)
# => 2

注意,如果没有范围,输出将是从0到N。

rand(6)    #=> gives a random number between 0 and 5.

random_number

另一种可能性是使用SecureRandom.random_number

如果给定一个正整数作为X,random_number 会返回一个整数,像这样:0 <=random_number < X。

SecureRandom.random_number(2)
# => will output 0 or 1
SecureRandom.random_number(100)
# => will output any  number from 0 to 99

如果没有任何参数,SecureRandom.random_number 将输出一个0到1之间的浮点数。

irb $> SecureRandom.random_number
# => 0.25562499980914666
irb $> SecureRandom.random_number
# => 0.8439818588730659

随机类

r = Random.new
r.rand(0...42) 
# => 22
r.bytes(3) 
# => "\xBAVZ"

请注意,随机类的行为本身就是一个随机发生器,所以你可以直接调用它,像这样。

Random.rand(0...42) 
# => same as rand(0...42)

Random.new

正如在这个优秀的StackOverflow答案中所说。

在大多数情况下,最简单的是使用randRandom.rand 。每次你想要一个随机数时,创建一个新的随机发生器是一个非常糟糕的主意。如果你这样做,你会得到初始播种算法的随机属性,与随机生成器本身的属性相比,这是非常糟糕的。

这意味着应该使用Random.new,除非有几个明显的例外。

  • 你只在你的应用程序中使用它一次,例如MyApp::Random = Random.new ,并在其他地方使用它。
  • 你想保存和恢复一个可重复的随机数序列的能力(容易,因为Random 对象可以marshalled)。
  • 你正在编写一个 gem,并且不希望与主程序可能使用的 rand/Random.rand 的任何序列发生冲突。
  • 你想要分裂的可重复的随机数序列(比如每个线程一个)。