ध्यान दें कि map
पर दूसरा तर्क एक निहित तर्क है। उपयुक्त प्रकारों के दायरे में एक निहित होना चाहिए, या अन्यथा, आप इस तरह के तर्क को पास करना होगा।
अपने उदाहरण में, That
Set[String]
होना चाहिए, बी Int
होना चाहिए और Repr
List[String]
होना चाहिए। इसलिए, कि संकलित करने के लिए के लिए आप दायरे में निम्नलिखित अंतर्निहित वस्तु की जरूरत है:
implicit object X: CanBuildFrom[List[String], Int, Set[String]]
दायरे में जैसी कोई चीज नहीं है। इसके अलावा, breakOut
इसे प्रदान नहीं कर सकता है, क्योंकि इसे स्वयं को CanBuildFrom
की आवश्यकता होती है, जिसका पहला प्रकार किसी भी वर्ग (Nothing
का एक कॉन्ट्रैक्ट-वेरिएंट वंश) हो सकता है, लेकिन अन्यथा अन्य प्रकारों द्वारा प्रतिबंधित है।
एक नज़र, उदाहरण के लिए, List
का साथी वस्तु से ले लो CanBuildFrom
कारखाने पर: क्योंकि यह A
के माध्यम से दूसरे और तीसरे पैरामीटर बांधता
implicit def canBuildFrom [A] : CanBuildFrom[List, A, List[A]]
, प्रश्न में निहित काम नहीं करेगा।
तो, इस तरह के निहितार्थों के बारे में, किसी को कैसे पता चल सकता है? सबसे पहले, स्कैला कुछ चीजों को सभी क्षेत्रों में आयात करता है।अभी, मैं निम्नलिखित आयात याद कर सकते हैं:
import scala.package._ // Package object
import scala.Predef._ // Object
// import scala.LowPriorityImplicits, class inherited by Predef
import scala.runtime._ // Package
जब से हम implicits बारे में चिंतित हैं, ध्यान रखें कि जब आप संकुल से बातें आयात करते हैं, तभी संभव implicits एकमात्र कर रहे हैं। जब आप ऑब्जेक्ट्स (सिंगलेट्स) से चीजें आयात करते हैं, तो दूसरी तरफ, आप निहित परिभाषाएं, मूल्य और सिंगलेट्स ले सकते हैं।
अभी Predef
और LowPriorityImplicits
के अंदर implicits हैं, जो स्ट्रिंग से संबंधित हैं। वे हमें "this is a string" map (_.toInt)
लिखने में सक्षम करते हैं।
तो, इन स्वचालित आयातों को छोड़कर, और आपके द्वारा किए गए स्पष्ट आयात, जहां कोई अंतर्निहित पाया जा सकता है? एक स्थान: उदाहरण के साथी वस्तुएं जिस पर विधि लागू की जा रही है।
मैं कहता साथी वस्तु रों, बहुवचन में, क्योंकि सभी लक्षण और वर्गों के साथी वस्तुओं प्रश्न में उदाहरण के वर्ग द्वारा विरासत में मिली प्रासंगिक implicits हो सकती है। मुझे यकीन नहीं है कि उदाहरण में स्वयं एक अंतर्निहित हो सकता है। ईमानदार होने के लिए, मैं अभी इसे पुन: पेश नहीं कर सकता, इसलिए मैं निश्चित रूप से यहां किसी तरह की गलती कर रहा हूं।
किसी भी दर पर, साथी वस्तुओं के अंदर देखो।
यहाँ एक काफी अच्छा स्पष्टीकरण http://blog.bruchez.name/2012/08/getting-to-know-canbuildfrom-without-phd.html –
रिकॉर्ड के लिए साथ पोस्ट है, इस तरह के उपयोग है एक वैचारिक नाम: वापसी प्रकार polymorphism। – lcn