Ruby:Random#rand和Kernel#rand之间的区别

时间:2012-10-26 13:17:50

标签: ruby random

Random#rand和Kernel#rand之间真的有区别吗?

从我所看到的,他们使用不同的'C'功能。

2 个答案:

答案 0 :(得分:1)

它看起来像一个稍微不同的API,但两者似乎都将实际生成留给了genrand_real函数。

答案 1 :(得分:1)

使用Range调用它们时的行为相同,但在其他几种情况下则不同。

  1. 使用负整数 -n (如-3)调用时,Random#rand 提升ArgumentError,而Kernel#rand只是表现得像你一样 使用 n (-n).to_int.abs)来调用它。
  2. 使用 0 进行调用时,Random#rand会引发ArgumentError Kernel#rand就像你没有任何争论地调用它一样。
  3. 使用Float n 调用时,Random#rand返回0之间的浮点数 和 n (如预期的那样)。 Kernel#rand进行n.to_int.abs次转化, 所以例如rand(-1.9)相当于rand(1),总是如此 返回0; rand(0.1)相当于rand(0),因此相当于randRandom#rand
  4. 对于奇怪的参数,似乎Random::rand(当然还有Kernel#rand)比var ratio = 1000; function kilo(grams) { return grams / ratio ; } 更强大。有关Kernel#randRandom#rand的文档中的详细信息。