मैं Scala Edition1 में प्रोग्रामिंग में Traits पर अध्याय से कोड उदाहरणों के माध्यम से काम कर रहा था https://www.artima.com/pins1ed/traits.html
और मेरे टाइपो के कारण एक अजीब व्यवहार हुआ। कोड स्निपेट के नीचे एक विशेषता के ओवरराइडिंग विधि के दौरान कोई संकलित त्रुटि नहीं दी जाती है, हालांकि ओवरराइड विधि का वापसी प्रकार अलग Unit
बनाम String
। लेकिन किसी ऑब्जेक्ट पर विधि को कॉल करने पर यह यूनिट को लौटाता है लेकिन कुछ भी प्रिंट नहीं करता है।
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 = ()
लेकिन जब मैं ओवरराइड विधि में स्पष्ट रिटर्न प्रकार देता हूं, तो यह एक संकलित त्रुटि देता है:
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
क्या कोई यह समझाने में मदद कर सकता है कि पहले मामले में कोई संकलन त्रुटि क्यों नहीं हुई।