AFAIK, Iterator.map
ленив, а Vector.map
нетерпелив, в основном потому, что это разные типы монад.Может быть, попробуйте быть ленивым или нетерпеливым в Scala?
Я хотел бы знать, есть ли шанс иметь EagerTry
и LazyTry
, которые ведут себя так же, как the current Try
, но с последним (LazyTry
) задерживает выполнение закрытия не прошло до результата необходимо (если это необходимо).
Обратите внимание, что объявление объявления как lazy
не очень хорошо работает в Scala, в частности оно работает для заданного объема. Альтернатива существует при передаче параметров (параметры по имени). Вопрос заключается в том, как добиться ленивого поведения при возвращении (ленивых) значений во внешний охват. Option
- это в основном коллекция длиной 0 или 1, это будет эквивалентный случай для ленивых коллекций (Iterator
, Sequence
), но ограничен длиной 0 или 1 (например, Option
и Either
). Меня особенно интересует Try
, то есть с использованием LazyTry
точно так же, как и Try
. Думаю, это должно быть аналогично в других случаях (Option
и Either
).
Обратите внимание, что у нас уже есть EagerTry
, так как текущий стандарт Try
нетерпелив. К сожалению, класс запечатан, поэтому, чтобы иметь нетерпеливые и ленивые версии того же класса, нам нужно было бы определить три из них и реализовать два из них (в отличие от их определения и реализации). Точка возвращает Try
без других слоев программного обеспечения, беспокоящихся о времени выполнения этого кода, то есть абстракции.
спасибо. Это охватывает большинство методов и функций 'Try', но неспособность использовать сопоставление шаблонов - большой облом. Для такого использования я бы предпочел нечто вроде [этого] (http://pastebin.com/g7Bys3gU). В таком случае нам нужно получить фактическое значение, прежде чем что-либо делать с ним, но он инкапсулирует лень просто прекрасно, единственная проблема: использовать его непрозрачно. Я даже пошел дальше, чтобы [попытаться определить метод сопоставления] (http://pastebin.com/9CkszZGf), но это работает не очень хорошо, и у меня заканчиваются идеи. – Trylks
Вы можете преобразовать его в 'Try' с' def toTry = base' и pattern match. –
Или добавьте объекты 'LazySuccess' и' LazyFailure' с методами 'unapply', шаблон которых соответствует' basic'. –