, bir var foo
yazarken, Scala derleyici otomatik bir ayarlayıcı (foo_=
adlandırılır) ve bir toplama (üretir var bunun için foo
olarak adlandırılır ve alanı özel olarak ayarlar (javap
ile 'public' Scala alanlarına sahip bir sınıfı derlerseniz özel olarak görürsünüz). 'Foo_ = hiçbir şeyi geçersiz kılar' hatası bu demektir. Özelliğinizde, bir foo_=
yöntemini tanımlamamışsınızdır ve bir genel alan ayarlayıcısı ve için her zaman çiftleri gelir.
Özellik içinde varsayılan bir değer (yani soyut yöntem) belirtmezseniz, override
anahtar sözcüğü gerekli değildir. Bu nedenle, ilk örneğinizde, alıcı soyut yöntemi ve ayarlayıcıyı geçersiz kılar ... sadece oradadır. Derleyici şikayetçi değil. Ancak, özelliğin yönteminin gerçek bir uygulamasını sağladığınızda, özellikle, override
anahtar sözcüğünü geçersiz kılmanız gerekir. protected var foo
yazarken, geter için override
anahtar kelimesini belirtmediniz ve override protected var foo
yazarken, derleyiciye foo_=
yönteminin geçersiz kılınacağını da belirttiniz, ancak bu tür bir yöntemin özelliği yok. Ayrıca, mantıksal olarak bir def
'u bir var
ile geçersiz kılabilirsiniz (önceki paragrafta olduğu gibi geçersiz kılmanın sıkı bir görünümü göz önünde bulundurularak). Bir def
mantıksal olarak bir işlevdir (bazı girdiler verirsiniz, bir çıktı üretir). Bir var
no-arg işleviyle aynıdır, ancak değerini başka bir şeye ayarlamayı da destekler; bu, bir işlev tarafından desteklenmeyen bir işlemdir. Bunun yerine, onu val
olarak değiştirirseniz Tamam olur. Her zaman aynı (önbelleğe alınmış) sonucu üreten bir işlev gibidir.
Eğer böyle bir şey yapabileceğini bir var
benzer davranışa sahip olmak istiyorsanız
(açık belirleyici ve alıcılar sahip olarak): Artık
class Wibble extends SomeTrait {
private var bar = "Hello"
override protected def foo = bar
protected def foo_=(v: String) { bar = v}
}
Eğer bir var :) yapabileceğini her şeyi yapabilir.
val x = new Wibble
println(x.foo) // yields "Hello"
x.foo = "Hello again"
println(x.foo) // yields "Hello again"
Üzgünüm - Bir hata yaptım - özgün özellik yöntemi de korunmuş olmalıdır. Mantıken bir "var" ile bir "def" 'i geçersiz kılmama konusunda sana katılıyorum emin değilim. Bütün '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '''''nın bir varyantı olduğunu bildiren bir fob '' diye adlandırılan bir erişimci olmasını beklediğimi, bu –
’un bir uygulamasının size katılıyorum olduğunu düşünüyorum. Ben cevabı yazdığımda daha katı bir kavram olarak düşünmeyi düşünüyordum. Cevabı düzenleyeceğim ve işe yarar bir çözüm sağlayacağım :). –
Bu tür bir '' geçersiz kılma var 'sözdizimi var –