को देखते हुए:आदेश और आदेश दिया और तुलना विकल्प
case class Person(name: String)
और ऐसा करने के लिए कोशिश कर रहा है: आदेश लापता बारे में एक शिकायत में
scala> List(Person("Tom"), Person("Bob")).sorted
का परिणाम है।
<console>:8: error: could not find implicit value for parameter ord: Ordering[Person]
List(Person("Tom"), Person("Bob")).sorted
हालांकि इस:
case class Person(name: String) extends Ordered[Person] {
def compare(that: Person) = this.name compare that.name }
ठीक काम करता है के रूप में उम्मीद:
scala> List(Person("Tom"), Person("Bob")).sorted
res12: List[Person] = List(Person(Bob), Person(Tom))
कोई आदेश या implicits शामिल नहीं है, हालांकि।
प्रश्न # 1: यहां क्या हो रहा है? (मेरे पैसे कुछ निहित पर है ...)
हालांकि, इसके बाद के संस्करण और तथ्य यह है कि यह देखते हुए:
scala> Person("Tom") > Person("Bob")
res15: Boolean = true
काम करता है, और वह भी इस:
scala> List(Some(2), None, Some(1)).sorted
से बाहर काम करता है बॉक्स:
res13: List[Option[Int]] = List(None, Some(1), Some(2))
मैं उम्मीद होती है कि इस:
scala> Some(2) > Some(1)
भी काम करेगा, लेकिन यह नहीं करता है:
<console>:6: error: value > is not a member of Some[Int]
Some(2) > Some(1)
प्रश्न # 2: क्यों नहीं, और कैसे मैं प्राप्त कर सकते हैं यह काम करने के लिए?
यह वास्तव में सवाल का जवाब नहीं देता है कि ऑर्डर किए जाने वाले आदेश [टी] जादुई रूप से ऑर्डरिंग [टी] का एक उदाहरण लाता है। और आखिरी तुलना करने के लिए आपको एक विधि क्यों बनाना है? –
मैंने विधि बनाई ताकि मैं ऑर्डरिंग के उदाहरण तक पहुंच प्राप्त कर सकूं। मैं उस उदाहरण की सामग्री आयात करता हूं, इसलिए मैं इसे 'ओपीएस' में अपना अंतर्निहित रूपांतरण प्राप्त कर सकता हूं, जो कुछ तुलना ऑपरेटर को परिभाषित करता है। उसी विधि का उपयोग करके, मुझे अंत में पता चला कि 'ऑर्डर' के लिए निहित रूपांतरण कहां है। http://www.scala-lang.org/api/current/index.html#scala.math.LowPriorityOrderingImplicits – Dylan
लेकिन यह दो विकल्पों की तुलना करने में सक्षम होने के लिए काफी काम करता है? –