संस्करण 2.10 से शुरू करते हुए, स्काला ने इस मुद्दे को ठीक से संभालने के लिए निहित वर्ग पेश किए।
यह एक दिए गए प्रकार पर लिपटे हुए वर्ग पर एक अंतर्निहित रूपांतरण करेगा, जिसमें आपके अपने तरीके और मूल्य हो सकते हैं।
आपके विशिष्ट मामले में, आप कुछ इस तरह का उपयोग करेंगे:
implicit class RichInt(x: Int) {
def isAFactorOf(y: Int) = x % y == 0
}
2.isAFactorOf(10)
// or, without dot-syntax
2 isAFactorOf 10
ध्यान दें कि जब संकलित किया जाता है, तो यह हमारे कच्चे मूल्य को बॉक्सिंग में समाप्त कर देगा RichInt(2)
। आप अपने रिचइंट को उपवर्ग के रूप में घोषित करके इसे प्राप्त कर सकते हैं AnyVal
:
implicit class RichInt(val x: Int) extends AnyVal { ... }
यह मुक्केबाजी का कारण नहीं होगा, लेकिन यह एक विशिष्ट अंतर्निहित वर्ग की तुलना में अधिक प्रतिबंधात्मक है। इसमें केवल विधियाँ हो सकती हैं, मूल्य या स्थिति नहीं।