Выбор.zip возвращает список, а не вариант
стандартная библиотечная документация описывает zip
частичная подпись как def zip[B](that: GenIterable[B]): Option[(A, B)]
но Some(1) zip Some(2)
возвращает List((1,2))
не Some((1,2))
. Это случай реализации багги или багги документации?
1 ответов
багги документации.
zip
на самом деле, определенных на Iterable
, и это применимо к Option
из-за неявного преобразования option2Iterable
(это явно указано в документации, если присмотреться).
по этой причине Option
сначала преобразуется в Iterable
а то zip
операция поддерживается.
это делается для повторного использования кода, но он пропускает некоторый случай, в котором Iterable
методы имеют смысл непосредственно на Option
без необходимость неявного преобразования.
вот соответствующее обсуждение в списке рассылки:https://groups.google.com/forum#!тема / scala-язык/MFU5PPt_jYw
Если вам действительно нужно zip
два варианта, вы можете использовать этот метод:
(opt1 zip opt2).headOption
кроме того, как Трэвис отметил в комментариях, вы можете альтернативно использовать scalaz Zip
введите класс, хотя вам придется использовать fzip
вместо.
opt1 fzip opt2