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

标签 scala option collect 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})

为什么会发生此错误?我想我误解了 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/

相关文章:

Java 8 Stream,如何获得 Top N 计数?

java - scala 中的 Hello World 有什么问题?

scala - foldRight效率?

javascript - 在JavaScript对象内循环

css - 仅显示多项选择中的第一个选项

Java collect with lambda expression 示例

scala - Play Framework 2.4.x。 Redis 模块 2.4.0。无法序列化 : java. io.NotSerializableException : play. api.i18n.DefaultMessagesApi

scala - 在 Scala 中传递惰性参数有什么帮助吗?

php - 从mysql拉取时如何在php选项值中添加计算功能?

C++收集算法?