Scala Option的collect方法不喜欢我的PartialFunction

pr1*_*001 4 scala collect option partialfunction

我想我错过了一些东西:

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})
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种错误?我想我误解了collect工作原理......

Dav*_*ith 14

除非您指定,否则文字None是类型Option[Nothing].这是必要的,因为None必须是所有类型Option [_]的有效成员.如果你改写了

(None:Option[Int]) collect ({ case n if n > 0 => n + 1; case _ => 0}) 
Run Code Online (Sandbox Code Playgroud)

要么

val x:Option[Int] = None
x collect ({ case n if n > 0 => n + 1; case _ => 0}) 
Run Code Online (Sandbox Code Playgroud)

那么编译器就能输入检查你的收费电话