Random#rand 和 Kernel#rand 之间真的有区别吗?
从我可以看到他们使用不同的'C'函数。
它看起来像一个稍微不同的 API,但两者似乎都将实际生成留给了genrand_real
函数。
当用 a 调用时,它们的行为相同Range
,但在其他几种情况下则不同。
Random#rand
raises ArgumentError
,而Kernel#rand
只是表现得好像你用n(by (-n).to_int.abs
)调用它。Random#rand
raises ArgumentError
,而
Kernel#rand
只是表现得好像你在没有任何参数的情况下调用它。Float
当使用n调用时,返回一个介于 0 和nRandom#rand
之间的浮点数(如预期的那样)。进行转换,例如等价于,它总是返回 0;等价于,因此等价于。Kernel#rand
n.to_int.abs
rand(-1.9)
rand(1)
rand(0.1)
rand(0)
rand
似乎Random#rand
(Random::rand
当然也)比Kernel#rand
奇怪的参数更健壮。Kernel#rand
和的文档中的更多信息Random#rand
。