'un Miras ve tip parametreleri Scala 2.8 koleksiyon sınıflarının kaynak kodunu inceliyorum. scala.collection.Traversable
hiyerarşisi hakkında sorularım var. Aşağıdaki bildirimleri bak:Traversable
package scala.collection
trait Traversable[+A]
extends TraversableLike[A, Traversable[A]]
with GenericTraversableTemplate[A, Traversable]
trait TraversableLike[+A, +Repr]
extends HasNewBuilder[A, Repr]
with TraversableOnce[A]
package scala.collection.generic
trait HasNewBuilder[+A, +Repr]
trait GenericTraversableTemplate[+A, +CC[X] <: Traversable[X]]
extends HasNewBuilder[A, CC[A] @uncheckedVariance]
Soru: Neden Traversable
tür parametreleri [A, Traversable]
ile GenericTraversableTemplate
uzanmaz - neden olmasın [A, Traversable[A]]
?
error: Traversable[A] takes no type parameters, expected: one
ben GenericTraversableTemplate
içinde @uncheckedVariance
açıklama kullanımı da ilgisi var olduğunu tahmin: Ben Traversable[A]
olarak değiştirmek çalıştığında bazı aynı yapıya sahip küçük bir program ile deneme çalıştı ve garip bir hata mesajı var bu? (Bu, işleri çalışmaya zorlamak için bir tür potansiyel olarak güvenli olmayan bir saldırı gibi görünüyor ...).
düzenlemek - (GenericTraversableTemplate
farklı varyansa sahip değişken ve değişmez hem koleksiyonları için kullanıldığından öyle) this question ek açıklamanın ilgili bazı yararlı cevaplar buldum.
Soru: hiyerarşi baktığınızda, görüyorsunuz iki kez Traversable
devralır HasNewBuilder
(bir kez TraversableLike
yoluyla ve bir kez GenericTraversableTemplate
yoluyla), ama biraz farklı tip parametrelerle söyledi. Tam olarak nasıl çalışır? Neden farklı tip parametreler bir hataya neden olmaz?
Bu kadar açık bir şekilde cevap vermek için zaman ayırdığınız için teşekkürler! Daha önce "türler" duymuştum ama şimdiye kadar ne demek istediklerini anlamadım. – Jesper