加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala重新使用警卫

发布时间:2020-12-16 09:20:48 所属栏目:安全 来源:网络整理
导读:我经常发现自己想在scala中重用保护评估的结果,例如 blah match { case Blah(a,b) if expensive(a) 10 = expensive(a) case _ = b} 这是否可能使用一些不太知名的咒语? (把@上昂贵的不行) 这可能会在不久的将来吗? 解决方法 您可以使用自定义提取器执行类



我经常发现自己想在scala中重用保护评估的结果,例如

blah match {
  case Blah(a,b) if expensive(a) < 10 =>
     expensive(a)
  case _ => b
}

这是否可能使用一些不太知名的咒语? (把@上昂贵的不行)

这可能会在不久的将来吗?

解决方法

您可以使用自定义提取器执行类似操作.这应该工作:

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")
}

确保昂贵的创建一个Option对象真的更贵,这是上面的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读