2014-09-08 3 views
1

В Scala я могу использовать либо java.util.Random, либо Rnglibrary (или любой другой монадический API). Rng (как другие монадические подходы) обеспечивает чистое решение без побочных эффектов, но, вероятно, имеет накладные расходы. Если нам нужно вычислить случайное значение, сначала построим вычисление и запустите его позже.Rng library vs. java.util.Random API

Я думаю, это проще (и, следовательно, более практично), чтобы использовать java.util.Random в простых случаях (например, перетасовка колоды, катить кости, выбрать случайную выборку из набора). Теперь мне интересно, когда нужно использовать Rng (или другие монадические подходы).

Что такое simpleest пример случайных вычислений, где Rng сияет?

+1

Речь идет не о скобках, а о правильности. Предположим, мне нужно иметь возможность тиражировать прогоны некоторого моделирования, в котором используются случайные числа. Это можно сделать с помощью «Случайного», но это может стать сложным, особенно перед лицом параллелизма и т. Д. Вы определенно не получите никакой помощи от системы типов. «Rng» имеет некоторые синтаксические накладные расходы, но в сложных ситуациях гораздо проще рассуждать. –

+0

@TravisBrown Спасибо. Репликация запуска - хороший пример (хотя я думаю, что могу это сделать и с Java API). – Michael

+0

@TravisBrown Я предполагаю, что у «Rng» есть некоторые накладные расходы. – Michael

ответ

0

Речь идет не о вычислении; речь идет о упаковке.

Связанная библиотека предоставляет ряд примеров того, как вы должны использовать монадический интерфейс Rng для создания красиво упакованного кода. Он компактный, с выразительной речью, типичной для программ Scala.

+0

Не могли бы вы указать мне на такой пример Rng, который было бы сложно реализовать с помощью java.util.Random? – Michael

+0

Это не ** трудно ** реализовать на Java; он просто берет кучу больше символов.С введением лямбда в Java 8 базовая функциональная композиция становится проще, но вы все же можете выразить ее более кратко в Scala. –

+0

Хорошо. Понимаю. Таким образом, преимущество «Rng» является лаконичным. Не могли бы вы указать мне на пример «Rng», который был бы значительно менее кратким, если бы он был реализован с помощью 'java.util.Random' вместо' Rng'? – Michael

Смежные вопросы