Doğru; new
zorunlu değildir. Onlar sadece yanı böyle örnek yöntemi List#::
tanımlanmış olabilir:
def ::[U >: T](x: U): List[U] = scala.::(x, this)
(Sahip olduğumuz Not: scala
paket nesnesinde tanımlanan
type :: = collection.immutable.::
val :: = collection.immutable.::
; ilk neden new scala.::(x, this)
çalışır ve ikincisi, benim scala.::(x, this)
çalışmamın nedenidir.)
The form the library uses yapıcıyı sizinki gibi doğrudan çağırır. Alternatif, ::
kasa sınıfı için oluşturulan sentetik tamamlayıcı nesnesinin apply
yöntemini çağırır, bu da yalnızca yapıcıyı çağırır. Belki de kurucuyu çağırmak daha açık mı, yoksa daha verimli mi? (
def ::[U >: T](x: U) = ::(x, this)
bazı tuhaf için yanlış olabilir: (. Derleyici apply
çağrısını satır içi etmezse beri Verimlilik kazanımları olsa da, hiçbir şey yakın olmalıdır, JVM olacak) ben en kompakt formu varsayalım yani, imkansız) bir tür tekrarlayıcı çağrı ve herhangi bir oranda ::
ve ::
adı verilen List
metodu arasındaki ayrımı bulanıklaştırır, Prof. Odersky okuyucu algılamayı en üst düzeye çıkarmak için ayrı tutmak için ağrıları alır.
Bu yardımcı olur umarım.
final sadece sınıfın genişletilemeyeceği anlamına gelir, örnek oluşturma :-) ile ilgisi yoktur. Vaka sınıfı temel olarak bir 'kibrit davası' bloğunda karşılaştırılabilecek bir sınıftır. – aishwarya