让我们说,我有以下代码片段:
val num = Future.successful(10)
num map {
case n if n > 0 => // do something
case _ // do something
}
我的问题是:我能以某种方式简化case n if n > 0
吗?
我希望我能写出类似的内容:
case _ > 0 => // do something
或使用明确指定的类型(尽管我们知道Future
已推断类型[Int]
):
case _: Int > 0 => // do something
这段代码能以某种方式简化吗?
答案 0 :(得分:2)
如果您想简化保护,可以过滤Future
先验:
val num = Future.successful(10).filter(_ > 0).map { nat =>
}
否则,你可以保持警惕并使用Future.collect
:
val num = Future.successful(10).collect {
case n if n > 0 => // do something
}
需要注意的一件重要事情是,如果没有为返回的值定义部分函数(例如,对于您的情况-1),则生成的未来将是包含Failure
的{{1}}。
除了这些选项,你还需要警卫。我没有看到任何语法上更短的表达方式。
答案 1 :(得分:2)
您无法简化case n if n > 0 => ...
。
模式匹配中的每个case子句都需要具有模式和(可选) guard 。
您所引用的语法(_ > 0
)仅在lambdas中有效,但对于case子句没有类似的特殊语法。