gpt4 book ai didi

scala - 是否可以将命名参数用于 Scala 案例类匹配?

转载 作者:行者123 更新时间:2023-12-04 14:37:50 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to pattern match large Scala case classes?

(4 个回答)


2年前关闭。




假设有一个 Scala 案例类 Point

case class Point(x: Int, y: Int)

可以使用通配符进行匹配:

val p = new Point(1,2)
val inRightHalfPlane = p match {
case Point(x, _) if x>0 => true
case _ => false
}

但是,如果成员数量增加,则需要使用更多通配符 _ :

case class Point(
x0: Int,
x1: Int,
x2: Int,
x3: Int,
x4: Int,
)


val flag = p match {
case Point(x,_,_,_,_,) if x>0 => true
......
}

是否有类似以下代码的语法糖?

val flag = p match {
case Point(x0=x) if x>0 => true
......
}

最佳答案

您可以定义自定义 unapply

  case class Point(
x0: Int,
x1: Int,
x2: Int,
x3: Int,
x4: Int,
)

object PositiveFirst {
def unapply(p: Point): Option[Int] = if (p.x0 > 0) Some(p.x0) else None
}

val p: Point = ???

val flag = p match {
case PositiveFirst(x) => true
// ......
}

关于scala - 是否可以将命名参数用于 Scala 案例类匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044189/

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