मैं मौजूदा प्रकारों में नए कार्यों को जोड़ने की कोशिश कर रहा हूं (इसलिए मैं आईडीई ऑटो उन प्रकारों के लिए प्रासंगिक कार्यों का सुझाव दे सकता हूं जिन पर मेरा नियंत्रण नहीं है, उदाहरण के लिए Future[Option[A]]
)। मैंने इसे पूरा करने के लिए निहित वर्ग और निहित रूपांतरण दोनों की खोज की है और वे दोनों एक ही व्यवहार की पेशकश करते हैं।विशेषता वर्ग बनाम लागू रूपांतरण
case class Foo(a: Int)
implicit class EnrichedFoo(foo: Foo) {
def beep = "boop"
}
Foo(1).beep // "boop"
एक अंतर्निहित रूपांतरण और का उपयोग कर:
case class Foo(a: Int)
trait Enriched {
def beep: String
}
implicit def fooToEnriched(foo: Foo) = new Enriched {
def beep = "boop"
}
Foo(1).beep // "boop"
मैं यहाँ एक अंतर हो सकता है कि पहला उदाहरण एक एक- बनाता लगता
वहाँ एक अंतर्निहित वर्ग का उपयोग कर के बीच कोई प्रभावी अंतर है एक विशेषता के बजाय कक्षा से बाहर, लेकिन मैं आसानी से एक सार तत्व का विस्तार करने के लिए निहित वर्ग को अनुकूलित कर सकता हूं, उदाहरण के लिए:
case class Foo(a: Int)
trait Enriched {
def beep: String
}
implicit class EnrichedFoo(foo: Foo) extends Enriched {
def beep = "boop"
}
Foo(1).beep // "boop"
उल्लेख करने के लिए एक अतिरिक्त बात यह है कि, जब आप टाइप बी के किसी ऑब्जेक्ट को टाइप बी के ऑब्जेक्ट में निहित रूप से रूपांतरित करना चाहते हैं, जहां बी * * अंतिम श्रेणी' * है, तो 'निहित डीफ़' आपका एकमात्र विकल्प है। – Adowrath