我想我错过了一些东西:
scala> Some(1) collect ({ case n if n > 0 => n + 1; case _ => 0})
res0: Option[Int] = Some(2)
scala> None collect ({ case n if n > 0 => n + 1; case _ => 0})
<console>:6: error: value > is not a member of Nothing
None collect ({ case n if n > 0 => n + 1; case _ => 0})
^
<console>:6: error: value + is not a member of Nothing
None collect ({ case n if n > 0 => n + 1; case _ => 0})
为什么会发生此错误?我想我误解了
collect
的工作原理......
最佳答案
除非您指定,否则文字 None
的类型为 Option[Nothing]
。这是必要的,因为 None 必须是所有类型 Option[_] 的有效成员。如果你改为写
(None:Option[Int]) collect ({ case n if n > 0 => n + 1; case _ => 0})
或者
val x:Option[Int] = None
x collect ({ case n if n > 0 => n + 1; case _ => 0})
然后编译器将能够键入检查您的对方付费电话
关于Scala Option 的 collect 方法不喜欢我的 PartialFunction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184587/