2013-05-07 38 views
13

Yapıcıda Trait'te bir değiştirilebilen değişkeni geçersiz kılmak istiyorum. Ancak, "int türünde değişken A'yı int türünde bir Int; değişken A ise değişken bir değişkeni geçersiz kılmaz" diye şikayet edecektir. Neden scala bunu yapmama izin vermiyor? Ve bunun için en iyi uygulama? TeşekkürScala'da Trait değişkeninde bir değişken değişken nasıl geçersiz kılınır?

trait A{ 
    var a:Int = _ 
} 

class B(override var a:Int) extends A 
+1

soruyu yapmak için gerçek durum basitleştirmek mü? Pek çok cevaptan da anlaşılacağı gibi, bir var olanı bir başkasıyla aynı isim ve türden geçersiz kılmak oldukça işe yaramaz. –

cevap

11

Sen (vars yani neden bunları değiştirmez zaten modifiye edilebileceğini, ancak, şu an beni kendilerini açıklamayız nedenlerle) geçersiz kılamaz, ancak bildirilen değişken başlatılmamış ve temsilci bırakabilir B için ikincisi:

trait A { 
    var a: Int 
} 

class B(var a: Int) extends A 
6

geçersiz kılma sadece yöntemlerle içindir. Bir değişkeni geçersiz kılmak mantıklı değildir. Bir değişkeni aynı türden başka bir değişkenle değiştirirseniz ne değişir? şey, değer ve bu kadar değişken olduğu için sadece, zaten her zaman ayarlanabilir ise:

trait A { 
    var a: Int = _ 
} 

class B (a0: Int) extends A { 
    a = a0 
} 

Ama bu ne istediğinizi Propably değil. Eğer bir girişim için "geçersiz kılma" bir "var" elde etmek istediğinizi ne tam olarak emin

trait A { 
    var a: Int 
} 
1

Not sonra eşdeğerdir

trait A { 
    def a: Int 
    def a_=(value: Int): Unit 
} 

class B(var a: Int) 

: Ayrıca sadece alıcı ve ayarlayıcı özet bırakabilir Başkalarının da bahsettiği gibi, yine de değişebilirsin.

Diğer pek çok tahmininizden biri, kendi kendini beğenmiş üyeler gibi bir şey ister misiniz? Kendi kendine yazım ek açıklamaları, bir mixin özelliği veya sınıfının üyelerine erişmenizi sağlar ve Scala derleyicisi, tüm bağımlılıkların doğru şekilde bağlanmasını sağlar? Eğer öyleyse, takip gibi bir şey çalışacaktır.

trait B{ 
var a:Int = _ 

}

trait A{self:B=> var b= a} 
class C extends A with B 
İlgili konular