Scala Edition1 Programlama Özellikleri bölümündeki kod örnekleriyle çalışıyordum https://www.artima.com/pins1ed/traits.html
ve yazım yüzünden garip bir davranışla karşılaştım. Kod parçası altındaki bir özellik yöntemini geçersiz kılmasını da geçersiz kılınmış yöntemin dönüş tipleri farklı olmasına rağmen herhangi bir derleme hata vermez Unit
vs String
. Ancak yöntemi bir nesneye çağırdığınızda Birim döndürür ancak hiçbir şey yazdırmaz.
trait Philosophical {
def philosophize = println("I consume memory, therefore I am!")
}
class Frog extends Philosophical {
override def toString = "green"
override def philosophize = "It aint easy to be " + toString + "!"
}
val frog = new Frog
//frog: Frog = green
frog.philosophize
// no message printed on console
val f = frog.philosophize
//f: Unit = ()
Ancak geçersiz kılınan yöntemde açık dönüş türünü verdiğimde, bir derleme hatası verir:
class Frog extends Philosophical {
override def toString = "green"
override def philosophize: String = "It aint easy to be " + toString + "!"
}
override def philosophize: String = "It aint easy to be " + toString +
^
On line 3: error: incompatible type in overriding
def philosophize: Unit (defined in trait Philosophical);
found : => String
required: => Unit
Herkes neden derleme hatası ilk durumda açıklamak yardımcı olabilir.