स्कैला में कई लक्षण हैं जिनका उपयोग आप टाइप क्लास के रूप में कर सकते हैं, उदाहरण के लिए Ordered
और Numeric
पैकेज scala.math
में।संख्यात्मक आदेश से अलग संख्यात्मक व्यवहार क्यों करता है?
मैं, उदाहरण के लिए, एक सामान्य विधि Ordered
इस तरह का उपयोग कर लिख सकते हैं:
def f[T <% Ordered[T]](a: T, b: T) = if (a < b) a else b
मैं Numeric
के साथ एक समान बात करना चाहता था, लेकिन यह काम नहीं करता:
def g[T <% Numeric[T]](a: T, b: T) = a * b
Ordered
और Numeric
के बीच कोई स्पष्ट विसंगति क्यों है?
मुझे पता है कि यह करने के लिए अन्य तरीके हैं, निम्नलिखित काम करेंगे (एक संदर्भ के लिए बाध्य करता है):
def g[T : Numeric](a: T, b: T) = implicitly[Numeric[T]].times(a, b)
लेकिन वह सिर्फ *
उपयोग करने के लिए दो संख्याओं को गुणा करने में सक्षम होने से अधिक जटिल लग रहा है। Numeric
विशेषता में *
जैसी विधियां शामिल नहीं हैं, जबकि Ordered
में <
जैसी विधियां शामिल हैं?
मैं जानता हूँ कि वहाँ भी है Ordering
जो आप Numeric
के रूप में एक ही तरीके से उपयोग कर सकते हैं, यह भी this answer देखें: अगर आप उन लोगों से अंतर्निहित संख्यात्मक [टी] आयात
def f[A : Ordering](a: A, b: A) = implicitly[Ordering[A]].compare(a, b)
अच्छा ... बहुत सुरुचिपूर्ण! –