আমি স্কেল সংস্করণে 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
প্রথম ক্ষেত্রে কোনও সংকলন ত্রুটি কেন কেউ ব্যাখ্যা করতে সহায়তা করতে পারে।