标准库文档将zip部分签名描述为def zip[B](that: GenIterable[B]): Option[(A, B)]但不Some(1) zip Some(2)返回.这是一个错误的实施或错误的文档?List((1,2))Some((1,2))
Gab*_*lla 10
Buggy文档.
zip实际上是定义的Iterable,它适用于Option隐式转换option2Iterable(如果你仔细观察,这在文档中明确说明).
因此Option,首先将其转换为a Iterable,然后zip支持该操作.
这是为了代码重用而完成的,但是它忽略了一些Iterable方法,其中方法直接有意义Option而不需要隐式转换.
以下是邮件列表中的相关讨论:https://groups.google.com/forum/#!topic / easla-language/MFU5PPt_jYw
如果您确实需要zip两个选项,则可以使用此解决方法:
(opt1 zip opt2).headOption
Run Code Online (Sandbox Code Playgroud)
此外,正如Travis在评论中指出的那样,您可以选择使用scalaz Zip类型,尽管您必须使用它fzip.
opt1 fzip opt2
Run Code Online (Sandbox Code Playgroud)