我经常发现自己想在scala中重用后卫评估的结果,例如
blah match {
case Blah(a, b) if expensive(a) < 10 =>
expensive(a)
case _ => b
}
使用一些鲜为人知的咒语有可能吗? (将
@
放在expensive
上无效)不久有可能吗?
最佳答案
您可以使用自定义提取器执行类似的操作。这应该工作:
case class Blah(a: Int, b: Int)
object expensive {
def unapply(x: Int): Option[Double] = Some(math.cos(x))
}
Blah(1, 1) match {
case Blah(a @ expensive(e), b) if e < 10 => println(a, b, e)
case _ => println("nothing")
}
确保
expensive
确实比创建Option
对象昂贵,这就是上面所做的。
关于scala - 在斯卡拉重用 guard ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577771/