私は抽出器を使用するために練習しています:
scala> object LE {
| def unapply[A](theList: List[A]) =
| if (theList.size == 0) None
| else Some((theList.head, theList.tail))
| }
defined module LE
1 つの要素に一致する場合に機能します。
scala> List(0, 1, 2) match {
| case head LE more => println(head, more)
| }
(0,List(1, 2))
しかし、複数の要素に一致する場合は機能しないようです:
scala> List(0, 1, 2) match {
| case head LE next LE more => println(head, more)
| }
<console>:10: error: scrutinee is incompatible with pattern type;
found : List[A]
required: Int
私のリスト エクストラクタは、Scala の Stream エクストラクタに非常によく似ており、次のように使用できます。
val xs = 58 #:: 43 #:: 93 #:: Stream.empty
xs match {
case first #:: second #:: _ => first - second
case _ => -1
}
では、私の LE がそのような方法で使用されないようにする違いは何でしょうか?