Scala:通过比较简化案例
Scala: simplify case with comparison
比方说,我有以下代码片段:
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
能否以某种方式简化此代码?
如果想简化守卫,可以过滤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
包含 NoSuchElementException
.
除了这些选项,你还需要守卫。我没有看到任何语法上更短的表达方式。
你无法简化 case n if n > 0 => ...
。
模式匹配中的每个 case 子句都需要有一个 pattern 和(可选)一个 guard。
您提到的语法 (_ > 0
) 仅在 lambda 中有效,但 case 子句没有类似的特殊语法。
比方说,我有以下代码片段:
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
能否以某种方式简化此代码?
如果想简化守卫,可以过滤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
包含 NoSuchElementException
.
除了这些选项,你还需要守卫。我没有看到任何语法上更短的表达方式。
你无法简化 case n if n > 0 => ...
。
模式匹配中的每个 case 子句都需要有一个 pattern 和(可选)一个 guard。
您提到的语法 (_ > 0
) 仅在 lambda 中有效,但 case 子句没有类似的特殊语法。