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答案中所说。
在大多数情况下,最简单的是使用
rand或Random.rand。每次你想要一个随机数时,创建一个新的随机发生器是一个非常糟糕的主意。如果你这样做,你会得到初始播种算法的随机属性,与随机生成器本身的属性相比,这是非常糟糕的。
这意味着不应该使用Random.new,除非有几个明显的例外。
- 你只在你的应用程序中使用它一次,例如
MyApp::Random = Random.new,并在其他地方使用它。 - 你想保存和恢复一个可重复的随机数序列的能力(容易,因为
Random对象可以marshalled)。 - 你正在编写一个 gem,并且不希望与主程序可能使用的 rand/Random.rand 的任何序列发生冲突。
- 你想要分裂的可重复的随机数序列(比如每个线程一个)。