2011-09-28 21 views
11

Ben Scala daha iyi anlamak için çalışıyorum ve aşağıdaki gibi kodu için geçerli bir usecase bulmak gibi olamaz:Scala'da anonim bir yazıyı genişletmenin amacı nedir?

class C extends { def m() { /* ... */ } } 

Bu tür yapıları izin mantığı nedir?

Teşekkürler!

+2

Verdiğiniz örnek, yapısal bir tür değil, anonim bir sınıf değildir. Bunu neden uzatabileceğini açıklamıyor ... –

+0

Doğru, ben – Eyvind

cevap

12

Buradaki tek gerekçenin "mümkünse özel durumlardan kaçınılması" olduğunu düşünüyorum. Herhangi bir sınıfı uzatabilirsiniz, anonim bir sınıf bir sınıftır, böylece anonim bir sınıfı uzatabilirsiniz.

+0

unvanını güncelledim Muhtemelen haklısın (+1). Gerçek bir kullanım vakasına bayılacak olsam da, eğer gerçekten var ise :) – Eyvind

+1

Ben bir tane olduğunu sanmıyorum ... –

+0

Kim katılıyorum, devralma davranışları paylaşma veya belirli bir hiyerarşiyi temsil etmeyi sağlar. Ancak, anonim bir üst sınıfsa, aynı üst sınıfı genişleten iki alt sınıfınız olamaz. – paradigmatic

11

Aslında bu anonim bir sınıf değil! Erken bir başlatıcıdır ve üst sınıfından önce gelen yapıcının bir parçası olarak çalışır. another stackoverflow question mükemmel cevabı alıntı:

abstract class X { 
    val name: String 
    val size = name.size 
} 

class Y extends { 
    val name = "class Y" 
} with X 

kod sonra bir boş gösterici istisna Z başlatıldı aldığımda oluşacak

class Z extends X { 
    val name = "class Z" 
} 

olarak yerine yazılsaydı, boyut normal adından önce başlatıldı çünkü başlatma siparişi (sınıftan önce süper sınıfı).