5

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

从我可以看到他们使用不同的'C'函数。

4

2 回答 2

2

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

于 2012-10-26T13:25:41.077 回答
2

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

  1. 当用负整数-n(如 -3)调用时,Random#rand raises ArgumentError,而Kernel#rand只是表现得好像你用n(by (-n).to_int.abs)调用它。
  2. 当用0调用时,Random#randraises ArgumentError,而 Kernel#rand只是表现得好像你在没有任何参数的情况下调用它。
  3. Float 当使用n调用时,返回一个介于 0 和nRandom#rand之间的浮点数(如预期的那样)。进行转换,例如等价于,它总是返回 0;等价于,因此等价于。Kernel#randn.to_int.absrand(-1.9)rand(1)rand(0.1)rand(0)rand

似乎Random#randRandom::rand当然也)比Kernel#rand奇怪的参数更健壮。Kernel#rand和的文档中的更多信息Random#rand

于 2017-03-27T03:53:33.270 回答