Добавление этого, чтобы помочь объяснить ответ Рамона.
Этот код использует лямбда-функцию.
let draw =
let rand = new Random()
fun () ->
rand.Next(0,36)
Может быть легче понять, что происходит, если вы дадите имя лямбда-функции.
let draw =
let rand = new Random()
let next() =
rand.Next(0,36)
next
Переменной draw назначается следующая функция. Вы можете переместить rand и next из области рисования, чтобы увидеть задание напрямую.
let rand = new Random()
let next() =
rand.Next(0,36)
let draw = next
Из приведенного выше кода видно, что в ответе Рамона новый Random вызывается только один раз, тогда как в примере SRKX он вызывается много раз.
Как упомянул Рамон Рэндом, генерирует последовательность чисел на основе случайного начального числа. Он всегда будет генерировать одинаковую последовательность чисел, если вы используете одно и то же семя. Вы можете передать случайное семя, как это new Random(2)
. Если вы не передадите ему значение, оно использует текущее время. Поэтому, если вы вызываете new Random несколько раз подряд без начального числа, скорее всего, оно будет иметь одинаковое начальное значение (поскольку время не изменилось). Если начальное число не изменяется, то первое случайное число последовательности всегда будет одинаковым. Если вы попробуете исходный код SRKX и вызовете несколькоDraws с достаточно большим номером, то время будет меняться во время цикла, и вы будете возвращать последовательность чисел, которая меняется очень часто.