gpt4 book ai didi

scala - 在斯卡拉重用 guard

转载 作者:行者123 更新时间:2023-12-03 14:52:21 25 4
gpt4 key购买 nike

我经常发现自己想在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com