এটি ব্যাখ্যা করার জন্য, আমাদের প্রথমে স্কালায় নেস্টেড ক্লাসগুলি ব্যাখ্যা করতে হবে। এই সহজ উদাহরণ বিবেচনা করুন:
class A {
class B
def f(b: B) = println("Got my B!")
}
এখন এটি দিয়ে কিছু চেষ্টা করুন:
scala> val a1 = new A
a1: A = A@2fa8ecf4
scala> val a2 = new A
a2: A = A@4bed4c8
scala> a2.f(new a1.B)
<console>:11: error: type mismatch;
found : a1.B
required: a2.B
a2.f(new a1.B)
^
আপনি যখন স্কালার অন্য শ্রেণীর অভ্যন্তরে কোনও ক্লাস ঘোষণা করেন, আপনি বলছেন যে class শ্রেণির প্রতিটি উদাহরণে একটি সাবক্লাস রয়েছে। অন্য কথায়, কোনও A.B
শ্রেণি নেই, তবে রয়েছে a1.B
এবং a2.B
ক্লাসগুলি, এবং সেগুলি পৃথক শ্রেণি, যেমন ত্রুটি বার্তা আমাদের উপরে বলেছে।
যদি আপনি এটি বুঝতে না পারেন তবে পথ নির্ভর প্রকারগুলি দেখুন।
এখন, #
আপনার পক্ষে কোনও নির্দিষ্ট ক্ষেত্রে সীমাবদ্ধ না রেখে এ জাতীয় নেস্ট ক্লাসগুলি উল্লেখ করা সম্ভব করে তোলে। অন্য কথায়, নেই A.B
, তবে আছে A#B
, যার অর্থ কোনও উদাহরণের B
নেস্টেড বর্গ ।A
উপরের কোডটি পরিবর্তন করে আমরা এটি কাজ করে দেখতে পারি:
class A {
class B
def f(b: B) = println("Got my B!")
def g(b: A#B) = println("Got a B.")
}
এবং এটি চেষ্টা করে দেখুন:
scala> val a1 = new A
a1: A = A@1497b7b1
scala> val a2 = new A
a2: A = A@2607c28c
scala> a2.f(new a1.B)
<console>:11: error: type mismatch;
found : a1.B
required: a2.B
a2.f(new a1.B)
^
scala> a2.g(new a1.B)
Got a B.