2012-07-12 8 views
17

Birisi lütfen koleksiyon API'sındaki Scala'nın çeşitli "Beğen" özelliklerini anlamama yardımcı olabilir. Her şeyi okuyordum ve şanssız bir şekilde karşılaştırmaya çalışıyorum. Sanırım haritayı görebiliyorum, MapLike'ı genişletiyor - 2 tane beton yöntemi ekliyor. Ama bu neden böyle bir soruya yalvarır? Neden Map ve MapLike yerine Koleksiyonlar API'sinde yalnızca 1 Harita özelliğiniz yok?Scala'nın HaritasıLike, ListLike, SeqLike, vb. Harita, Liste, Sıra?

Teşekkür ederiz! Bu ayrıntılar için

+0

[Scala 2.8 koleksiyonları tasarım öğreticisi] 'nin olası kopyası (http://stackoverflow.com/questions/1722137/scala-2-8-collections-design-tutorial) –

+0

Aslında bu bir çift değil ... bu soru bölümlenmiş onun tarafından. –

cevap

14

iyi kaynak Martin Odersky and Lex Spoon's "What's New in Scala 2.8: The Architecture of Scala Collections" geçerli:

Scala koleksiyonu kütüphane kod tekrarını önler ve yani- içinde koleksiyonları üzerinde jenerik güçlendiriciler ve traversals kullanarak "aynı sonucu tipi" prensibini ulaşır uygulama özellikleri olarak adlandırıldı. Bu özellikler , bir Like son ekiyle adlandırılmıştır; örneğin, IndexedSeqLike, IndexedSeq için uygulama özelliğidir ve benzer şekilde, TraversableLike, Traversable için uygulama özelliğidir. Traversable veya IndexedSeq gibi toplama sınıfları, tüm bu yöntemlerden somut yöntem uygulamalarını devralır. Uygulama özelliklerinin, normal koleksiyonları için bir tane yerine iki tür parametresi vardır. Onlar sadece Koleksiyonun eleman türü üzerinden değil parametreleştirdiğinizde, aynı zamanda koleksiyonun temsil tip, yani, altta yatan toplama tipi, üzerinde bu tür Seq[I] veya List[T] ...

bütün makale olarak Kendi koleksiyon sınıflarınızı Koleksiyonlar API'sı ile entegre etmek istiyorsanız ya da kütüphanenin nasıl çalıştığına dair daha derin bir anlayış istiyorsanız, son derece kullanışlıdır.

+1

Sadece bu alıntıyı okumaktan çok daha fazla bilgim yok (@LalolnDublin ile aynı soruya sahibim) :(Daha genel bazı özelliklerin uygulanabileceğini görüyorum, ama gerçekten nerede göremiyorum yararlı olurdu: –

+0

@Karel: Makaleyi deneyin! Bu çabaya değer. Tam bir açıklama burada kopyalamak için çok uzun olurdu ve orijinal kaynak çok kolay erişilebilir ve zaten çok net olduğunda hiçbir açıklama görmedim –

+0

Teşekkür ederim, makaleyi birkaç kez okuduktan sonra hala kavramını kavramakta güçlük çekiyorum (scala için yeni olmanın yardımı yoktur) ama bir anahtar eşya “TraversableLike” (2 tip param ile) kavramı gibi görünüyor. Travelling arayüzünü, her iki öğenin ve verilerin temsilinin tek tip bir tip temsili ile kısıtlanmadan kullanmasına izin verir. Bunu daha fazla örneklemeden tam olarak anlamadım, ama bir adım daha yakın olduğumu hissediyorum! – LaloInDublin