স্কালায়, আমরা বিদ্যমান বা নতুন ধরণের পুনঃনির্মাণের জন্য কমপক্ষে দুটি পদ্ধতি ব্যবহার করতে পারি। ধরা যাক আমরা প্রকাশ করতে চাই যে একটি ব্যবহার করে কিছু পরিমানযোগ্য হতে পারে Int
। আমরা নিম্নলিখিত বৈশিষ্ট্য সংজ্ঞায়িত করতে পারি।
অন্তর্নিহিত রূপান্তর
trait Quantifiable{ def quantify: Int }
এবং তারপরে আমরা স্ট্রিংস এবং লিস্টগুলির পরিমাণ নির্ধারণের জন্য অন্তর্নিহিত রূপান্তরগুলি ব্যবহার করতে পারি।
implicit def string2quant(s: String) = new Quantifiable{
def quantify = s.size
}
implicit def list2quantifiable[A](l: List[A]) = new Quantifiable{
val quantify = l.size
}
এগুলি আমদানির পরে, আমরা quantify
স্ট্রিং এবং তালিকাগুলিতে পদ্ধতিটি কল করতে পারি । নোট করুন যে পরিমাণের পরিমাণটি তার দৈর্ঘ্য সংরক্ষণ করে তাই এটি পরবর্তী কলগুলিতে তালিকার ব্যয়বহুল ট্র্যাভারসাল এড়িয়ে চলে quantify
।
ক্লাস টাইপ করুন
একটি বিকল্প হ'ল "সাক্ষী" সংজ্ঞায়িত করা Quantified[A]
যা উল্লেখ করে যে, কিছু প্রকারের A
পরিমাণ নির্ধারণ করা যেতে পারে।
trait Quantified[A] { def quantify(a: A): Int }
আমরা তখন জন্য এই ধরনের ক্লাসের দৃষ্টান্ত প্রদান String
এবং List
কোথাও।
implicit val stringQuantifiable = new Quantified[String] {
def quantify(s: String) = s.size
}
এবং যদি আমরা তারপরে যুক্তিগুলির পরিমাণ নির্ধারণের জন্য একটি পদ্ধতি লিখি তবে আমরা লিখি:
def sumQuantities[A](as: List[A])(implicit ev: Quantified[A]) =
as.map(ev.quantify).sum
বা প্রসঙ্গের বাউন্ড সিনট্যাক্স ব্যবহার করে:
def sumQuantities[A: Quantified](as: List[A]) =
as.map(implicitly[Quantified[A]].quantify).sum
তবে কখন কোন পদ্ধতিটি ব্যবহার করবেন?
এখন প্রশ্ন আসে। এই দুটি ধারণার মধ্যে আমি কীভাবে সিদ্ধান্ত নিতে পারি?
আমি এখন পর্যন্ত কি লক্ষ্য করেছি।
টাইপ ক্লাস
- টাইপ ক্লাসগুলি সুন্দর প্রসঙ্গের বাউন্ড সিনট্যাক্সের অনুমতি দেয়
- প্রকারের ক্লাসগুলির সাথে আমি প্রতিটি ব্যবহারে একটি নতুন র্যাপার বস্তু তৈরি করি না
- প্রসঙ্গের বাউন্ড সিনট্যাক্সটি আর কাজ করে না যদি ধরণের শ্রেণিতে একাধিক ধরণের পরামিতি থাকে; কল্পনা করুন যে আমি জিনিসগুলি কেবল পূর্ণসংখ্যার সাথেই নয় কিছু সাধারণ ধরণের মানগুলির সাথে মানিয়ে তুলতে চাই
T
। আমি একটি টাইপ ক্লাস তৈরি করতে চাইQuantified[A,T]
অন্তর্নিহিত রূপান্তর
- যেহেতু আমি একটি নতুন অবজেক্ট তৈরি করেছি, আমি সেখানে মানগুলি ক্যাশে করতে পারি বা আরও ভাল উপস্থাপনা গণনা করতে পারি; তবে আমি কি এড়ানো উচিত, যেহেতু এটি বেশ কয়েকবার ঘটতে পারে এবং একটি স্পষ্ট রূপান্তর সম্ভবত একবারেই ডাকা হত?
আমি উত্তর থেকে কি আশা করি
একটি (বা একাধিক) ব্যবহারের কেস (গুলি) উপস্থাপন করুন যেখানে উভয় ধারণার মধ্যে পার্থক্য রয়েছে এবং ব্যাখ্যা করুন যে আমি কেন অন্যটির চেয়ে বেশি পছন্দ করি। দুটি ধারণার মর্ম এবং একে অপরের সাথে তাদের সম্পর্কের ব্যাখ্যাও খুব সুন্দর হবে, এমনকি উদাহরণ ছাড়াই।