Ответ 1
Простой подход к предоставлению экстракторов для чередующихся классов, которые фактически используются в экстракторах 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
Обратите внимание, что это не относится к проблеме пропуска остальных параметров в классах case, определенных выше.
Также обратите внимание на слабость этого подхода, проиллюстрированную следующим образом:
scala> val Array(a,b) = Array(1)
scala.MatchError: [[email protected] (of class [I)