给出以下代码:
abstract class MyTuple
...
case class MySeptet(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int) extends MyTuple
case class MyOctet(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int) extends MyTuple
...
使用生成的提取器时,是否可以跳过剩余的参数,假设它们未被使用?
e.g。我不想在下面的代码片段中写下大量的下划线:
case MyOctet(a, b, _, _, _, _, _, _) => ... // uses only a and b
答案 0 :(得分:2)
为 tupled 类提供提取器的简单方法,它实际上依赖于Array
提取器,因此绕过了原始问题。
让
abstract class MyTuple (order: Int)
case class MySeptet(coord: Array[Int]) extends MyTuple(7)
case class MyOctet(coord: Array[Int]) extends MyTuple(8)
等等
val o = MyOctet( (1 to 8).toArray )
我们可以像这样在八位字节中提取前两个元素,
o match {
case MyOctet( Array(a,b,_*) ) => a+b
case _ => 0
}
res: Int = 3
请注意,这并未解决在上面定义的案例类中跳过剩余参数的问题。
还要注意这种方法的弱点,如下所示,
scala> val Array(a,b) = Array(1)
scala.MatchError: [I@16a75c0 (of class [I)
答案 1 :(得分:-1)
case o: MyOctet => o.a + o.b