Constraining types in Scala's generics to accept any kind of Int -
मैं एक समारोह को अस्पष्ट रूप से लिखना चाहता हूं:
def doubleit [A] (a : ए): ए = {a + a} लेकिन मुझे 'ए' का अर्थ किसी भी प्रकार का मतलब है, लेकिन कुछ भी नहीं। क्या स्काला को मैं 'ए' का मतलब समझने के बारे में एक सुराग देने का एक तरीका है?
def doubleit [a & lt ;: int] (a: A): a = {a + a } संकलक द्वारा खारिज कर दिया गया है।
सादे स्कला में आप टाइप वर्ग इंटीग्रल :
scala & gt; का उपयोग कर सकते हैं। डेफ डबल (ए: इंटीग्रल) (ए: ए): ए = इंटिग्रल [एटिग्राल [ए]] प्लस (ए, ए) दोहरा: [ए] (ए: ए) (इंटिग्रल [ए]): 1। स्केला & gt; डबल (2) res0: इंट = 4 स्केल & gt; एक अन्य संभावित सिंटैक्स: def doubleit [A] (a: A) एक और संभावित सिंटैक्स: डेफिट (बिगइंट (4)) res1: scala.math.bigInt = 8
) (अंतर्निहित ev: इंटीग्रल [ए]): ए = ev.plus (ए, ए)
ev उन अंतर्निहित पैरामीटरों के लिए सामान्यतः नाम है। + , - आदि के बजाय plus और की तरह सामान्य ऑपरेशंस का उपयोग करना भी संभव है। शून्य :
def doubleit [ए] (ए: ए) (अंतर्निहित ev: इंटीग्रल [ए]): ए = {आयात ev._ a + a}
या @ के चालौक्स द्वारा दिए गए सुझाव के अनुसार, इंटीग्रल से आयात करें। उदाहरण: पहले से:
आयात करें Integral.Implicits._ def doubleit [A : इंटीग्रल] (ए: ए): ए = ए + ए यदि आप चाहते हैं कि फ़ंक्शन केवल न केवल पूर्णांक, बल्कि डबल s, बिगडीकैमल s, आदि। आप संख्यात्मक को इंटीग्रल के बजाय
आयात कर सकते हैं। संख्यात्मक। Implcits._ def doubleit [ए: संख्यात्मक] (ए: ए): ए = एक + एक > <<>> <<> <<>> <<> <<> <<> <<> <<> <पी> स्पष्टीकरण : > <लेखन> [ए: इंटीग्रल]
। सभी बुनियादी अभिन्न प्रकारों के लिए पहले से ही स्काला में परिभाषित किया गया है, ताकि आप इसका उपयोग int या BigInt के साथ सीधे कर सकते हैं। इंटीग्रल [न्यूइटेग्राल टाइप] और सभी आवश्यक तरीकों को लागू करने के लिए एक नया अंतर्निहित चर परिभाषित करके नया इंटीग्रल प्रकार को परिभाषित करना भी संभव है। कॉल करने के लिए परस्पर [इंटीग्रल [ए]] को इंटीग्रल [ए] की इस अन्तर्निहित आवृत्ति को देता है जिसके लिए इसके अलावा विधि प्लस और अन्य विधियों के लिए है Integrals पर अन्य संचालन कर रहे हैं।
Comments
Post a Comment