Random#rand和Kernel#rand之间真的有区别吗?
从我所看到的,他们使用不同的'C'功能。
答案 0 :(得分:1)
它看起来像一个稍微不同的API,但两者似乎都将实际生成留给了genrand_real
函数。
答案 1 :(得分:1)
使用Range
调用它们时的行为相同,但在其他几种情况下则不同。
Random#rand
提升ArgumentError
,而Kernel#rand
只是表现得像你一样
使用 n ((-n).to_int.abs
)来调用它。Random#rand
会引发ArgumentError
Kernel#rand
就像你没有任何争论地调用它一样。Float
n 调用时,Random#rand
返回0之间的浮点数
和 n (如预期的那样)。 Kernel#rand
进行n.to_int.abs
次转化,
所以例如rand(-1.9)
相当于rand(1)
,总是如此
返回0; rand(0.1)
相当于rand(0)
,因此相当于rand
到Random#rand
。对于奇怪的参数,似乎Random::rand
(当然还有Kernel#rand
)比var ratio = 1000;
function kilo(grams) {
return grams / ratio ;
}
更强大。有关Kernel#rand
和Random#rand
的文档中的详细信息。