#ruby #random-seed
#ruby #случайное начальное значение
Вопрос:
Как мы можем установить начальное значение в ruby таким образом, чтобы любые функции, зависящие от RNG, возвращали одинаковые результаты (например, похожие на random.seed() в python?
Ответ №1:
Чтобы установить глобальное случайное начальное значение, вы можете использовать Kernel#srand
. Это повлияет на будущие вызовы Kernel#rand
, глобальной функции случайных чисел.
srand(some_number)
rand() # Should get consistent results here
Если вы хотите локальную случайность, не влияя на глобальное состояние, тогда вы хотите использовать Random
класс. Конструктор этого класса принимает случайное начальное значение.
r = Random.new(some_number)
r.rand() # Should get same result as above
Как правило, может быть полезно передавать определенные случайные состояния, поскольку это значительно упрощает моделирование и тестирование и сохраняет ваши функциональные эффекты локальными.
Комментарии:
1. Не могли бы вы, пожалуйста, объяснить это немного подробнее в ответе: Как правило, может быть полезно обойти определенные случайные состояния, поскольку это значительно упрощает насмешку и тестирование и сохраняет ваши функциональные эффекты локальными. ?
2. Это должен быть предпочтительный ответ — большой 1 за упоминание побочных эффектов
srand
Ответ №2:
Используйте srand()
метод
srand(12345)
rand()
=> 0.9296160928171479
rand()
=> 0.3163755545817859
srand(12345)
rand()
=> 0.9296160928171479
rand()
=> 0.3163755545817859