मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो किसी भी स्काला प्रकार पर कुल ऑर्डरिंग के साथ काम करता है (यानी मैं इसे '<' पर उपयोग कर सकता हूं)। इसके लिए वाक्यविन्यास क्या है? सबसे अच्छा मैं के साथ आ गया हैऑर्डर्ड [ए] के किसी भी प्रकार के उप-प्रकार को लेने वाले फ़ंक्शन के लिए स्कैला वाक्यविन्यास क्या है?
def lessThan[T <: Ordered[T]](x: T, Y: T) = x < y
काम यही कारण है कि यह नहीं है, हालांकि, जब मैं आरईपीएल से इसे आज़माएं:
scala> lessThan(1, 2)
<console>:8: error: inferred type arguments [Int] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
lessThan(1, 2)
^
scala> import runtime._
import runtime._
scala> lessThan(new RichInt(1), new RichInt(2))
<console>:8: error: inferred type arguments [scala.runtime.RichInt] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
lessThan(new RichInt(1), new RichInt(2))
अनिवार्य रूप से, मेरा मानना है कि मैं इस के बराबर चाहते हैं हास्केल कोड:
lessThan :: (Ord a) => a -> a -> Bool
lessThan x y = x < y
मैं डेबियन सिस्टम पर स्कैला 2.7.3 का उपयोग कर रहा हूं।
मुझे क्या याद आ रही है, और कहां?
आपको विधि के पैरामीटर के रूप में स्पष्ट रूप से अंतर्निहित क्यों करना है? यदि स्कैला-रनटाइम जानता है कि टी को ऑर्डर करने के लिए निहित रूप से कैसे परिवर्तित किया जाए [टी] मुझे एक अंतर्निहित पैरामीटर क्यों सूचीबद्ध करने की आवश्यकता है? धन्यवाद! – shj
सबसे पहले, आप किसी भी टी को ऑर्डरर्ड [टी] में परिवर्तित नहीं कर सकते हैं। उदाहरण के लिए, एक ऑर्डरिंग को परिभाषित करें (Int => Int)। दूसरा, जब रूपांतरण संभव हो, रनटाइम को कन्वर्ट करने का तरीका नहीं पता है। इसके बजाए, संकलक जानता है कि रनटाइम पर रूपांतरण करने के लिए फ़ंक्शन कैसे डालें। –
ऐसा लगता है कि पहली विधि को बहिष्कृत किया गया है [एसआई -7629] (https://issues.scala-lang.org/browse/SI-7629) –