Saya sedang mengerjakan contoh kode dari bab Traits in Programming in Scala Edition1 https://www.artima.com/pins1ed/traits.html
dan menemukan perilaku aneh karena kesalahan ketik saya. Sementara override metode sifat di bawah ini potongan kode tidak memberikan kesalahan kompilasi meskipun jenis kembalinya metode ditimpa berbeda Unit
vs String
. Tetapi setelah memanggil metode pada objek, ia mengembalikan Unit tetapi tidak mencetak apa pun.
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 = ()
Tetapi ketika saya memberikan tipe pengembalian eksplisit dalam metode yang diganti, itu memberikan kesalahan kompilasi:
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
Adakah yang bisa membantu menjelaskan mengapa tidak ada kesalahan kompilasi dalam kasus pertama.