स्कैला में, मैं जेनेरिक कक्षाएं लिखने में सक्षम होना चाहता हूं जो ऑपरेटर जैसे>, /, * आदि का उपयोग करते हैं, लेकिन मुझे नहीं लगता कि टी को कैसे बाधित करना है कि यह काम करेगा।स्कैला: जेनेरिक कक्षाओं में संख्यात्मक संचालन करने का सबसे अच्छा तरीका क्या है?
मैंने ऑर्डर्ड [टी] के साथ टी को बाधित करने में देखा, लेकिन ऐसा लगता है कि केवल RichXXX (जैसे RichInt) इसे विस्तारित नहीं करता है, इंट आदि नहीं। मैंने न्यूमेरिक [टी] भी देखा, क्या यह केवल उपलब्ध है स्कैला 2.8? कई टी जो समर्थन नहीं करते> आदि
विचार देखते हैं क्योंकि,
class MaxOfList[T](list: List[T]) {
def max = {
val seed: Option[T] = None
list
.map(t => Some(t))
// Get the max
.foldLeft(seed)((i,m) => getMax(i,m))
}
private def getMax(x: Option[T], y: Option[T]) = {
if (x.isDefined && y.isDefined)
if (x > y) x else y
else if (x.isDefined)
x
else
y
}
}
इस वर्ग के संकलन नहीं होगा:
यहाँ एक विशिष्ट उदाहरण है?
अभी के लिए मैं एक Mixin विशेषता का उपयोग किया है यह चारों ओर पाने के लिए:
/** Defines a trait that can get the max of two generic values
*/
trait MaxFunction[T] {
def getMax(x:T, y:T): T
}
/** An implementation of MaxFunction for Int
*/
trait IntMaxFunction extends MaxFunction[Int] {
def getMax(x: Int, y: Int) = x.max(y)
}
/** An implementation of MaxFunction for Double
*/
trait DoubleMaxFunction extends MaxFunction[Double] {
def getMax(x: Double, y: Double) = x.max(y)
}
कौन सा अगर हम बदल मूल वर्ग इन्स्टेन्शियशन समय में मिलाया जा सकता है।
पीएस मिच, getMax के अपने पुनः लिखने से प्रेरित है, यहाँ एक और है:
private def getMax(xOption: Option[T], yOption: Option[T]): Option[T] = (xOption,yOption) match {
case (Some(x),Some(y)) => if (x > y) xOption else yOption
case (Some(x), _) => xOption
case _ => yOption
}
धन्यवाद:
आप कुछ सामान्य कोड के टुकड़े मैं Rosetta Code के लिए लिखा था में रुचि हो सकती। मैं कसम खाता हूँ कि मैंने कोशिश की और इसे संकलित करने के लिए नहीं मिला! –
मैंने आपके द्वारा प्रेरित getMax के एक और संस्करण के साथ मूल प्रश्न में एक अद्यतन जोड़ा। –
मैंने अपने getMax को आपके द्वारा प्रेरित एक और संस्करण के साथ अपडेट किया। कुछ प्रकार की एकता तक पहुंचने से पहले कितने पुनरावृत्तियों? –