Как использовать синтаксис Array # sample (n, random: rng)? - PullRequest
7 голосов
/ 20 декабря 2011

Документация для Array#sample говорит, что это может занять rng:

Если задано значение rng, оно будет использоваться в качестве генератора случайных чисел.

Как диапазон может функционировать как генератор случайных чисел, или почему такая вещь полезна?

Также хеш-форма предполагает, что есть другие варианты, но я ничего не могу найти о них. Попытка [1,2,3,4,5].sample(3) ведет себя так же, как [1,2,3,4,5].sample(3, random: 1..2).

1 Ответ

8 голосов
/ 20 декабря 2011

Аргумент должен быть генератором случайных чисел (ГСЧ).

Если он не указан, по умолчанию используется стандартная реализация Ruby.

Его можно заменить произвольным ГСЧ, например, не случайным:

class NotAtAllRandom
  def self.rand(x=0)
    0
  end  
end  

> (1..10000).sample(3, random: NotAtAllRandom)
=> [1, 2, 3]
> (1..10000).sample(3, random: NotAtAllRandom)
=> [1, 2, 3]
...