5

Random#randとKernel#randには本当に違いがありますか?

私が見ることができることから、彼らは異なる「C」関数を使用しています。

4

2 に答える 2

2

少し異なるAPIのように見えますが、どちらも実際の生成をgenrand_real関数に任せているようです。

于 2012-10-26T13:25:41.077 に答える
2

で呼び出された場合は同じように動作しますが、Range他のいくつかの場合は異なります。

  1. 負の整数-n(-3など)でRandom#rand 呼び出されるとArgumentError、が発生しますが、 n(by )Kernel#randで呼び出した場合と同じように動作します。(-n).to_int.abs
  2. 0で呼び出されると、Random#randは発生しますがArgumentErrorKernel#rand引数なしで呼び出した場合と同じように動作します。
  3. Float nで呼び出されると、0とnRandom#randの間のfloatを返します(予想どおり)。変換を行うため、たとえば、は常に0を返すと同等です。と同等であり、したがってと同等です。Kernel#randn.to_int.absrand(-1.9)rand(1)rand(0.1)rand(0)rand

Random#rand(そしてもちろん)奇妙なパラメータRandom::randよりもロバストなようです。およびKernel#randのドキュメントの詳細情報。Kernel#randRandom#rand

于 2017-03-27T03:53:33.270 に答える