dac*_*142 6 scala wildcard pattern-matching case-class
假设有一个Scala案例类 Point
case class Point(x: Int, y: Int)
Run Code Online (Sandbox Code Playgroud)
可以使用通配符进行匹配:
val p = new Point(1,2)
val inRightHalfPlane = p match {
case Point(x, _) if x>0 => true
case _ => false
}
Run Code Online (Sandbox Code Playgroud)
但是,如果成员数增加,则将需要使用更多通配符_:
case class Point(
x0: Int,
x1: Int,
x2: Int,
x3: Int,
x4: Int,
)
val flag = p match {
case Point(x,_,_,_,_,) if x>0 => true
......
}
Run Code Online (Sandbox Code Playgroud)
是否有类似以下代码的语法糖?
val flag = p match {
case Point(x0=x) if x>0 => true
......
}
Run Code Online (Sandbox Code Playgroud)
您可以定义自定义 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
// ......
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |