9
Son zamanlarda Ekstraktörler ile oynamak oldum
eşleşen ve Liste presi özellikle bu nasıl çalıştığını merak:anlama desen listeleri
List(1, 2, 3) match {
case x :: y :: z :: Nil => x + y + z // case ::(x, ::(y, ::(z , Nil)))
}
Tamam :: desende kullanılan, bu yüzden derleyici olduğunu tahmin edilmektedir şimdi :: - Nesnede unapply yöntemini arar. Bunu denedim:
scala> (::).unapply(::(1, ::(2, Nil)))
res3: Option[(Int, List[Int])] = Some((1,List(2)))
Bu işe yarıyor. Ancak bu yapmaz:
scala> (::).unapply(List(1,2,3))
<console>:6: error: type mismatch;
found : List[Int]
required: scala.collection.immutable.::[?]
(::).unapply(List(1,2,3))
yapar iken:
scala> List.unapplySeq(List(1,2,3))
res5: Some[List[Int]] = Some(List(1, 2, 3))
Aslında ben şu anda biraz şaşkınım. Derleyici burada unapply'ın doğru uygulamasını nasıl seçer?
Ve derleyici bunu dener çünkü :: Listenin bir alt türü nedir? Güncelleme: Ah anladım ^^. – raichoo
@raichoo - Bunu deniyor çünkü desende '::' diye soruyorsunuz. –
Evet, yine de öyle. Bunu açıkladığın için teşekkürler :) – raichoo