मान लीजिए कि मेरे पास यह है:क्या नियंत्रित करने का कोई तरीका है कि कौन सा अंतर्निहित रूपांतरण डिफ़ॉल्ट रूप से उपयोग किया जाएगा?
class String2(val x:String) {
def *(times:Int) : String = {
val builder = new StringBuilder()
for(i <- 0 until times) {
builder.append(x)
}
builder.toString()
}
}
अब अगर मैं यह निहित जोड़ता हूं:
implicit def gimmeString2(y:String) = new String2(y)
मुझे संकलन त्रुटि मिलेगी क्योंकि स्ट्रिंगवॉपर भी इस अंतर्निहित को जोड़ता है। क्या कंपाइलर को कहने का कोई तरीका है "अन्य implicits को अनदेखा करें, इसका उपयोग करें", ताकि मुझे String2
ऑब्जेक्ट को तुरंत चालू करने और उस पर काम करने की आवश्यकता न हो?
मैं मानता हूं कि उदाहरण कोड सबसे उपयुक्त नहीं हो सकता है (इस प्रश्न के लिए), लेकिन मुझे लगता है कि यह करेगा।
संभावित डुप्लिकेट: यह है http://stackoverflow.com/questions/1339148/avoiding-implicit-def-ambiguity-in-scala –
मुझे नहीं लगता कि एक डुप्लिकेट उस प्रश्न के लेखक दोनों implicits रखना चाहता था। मुझे केवल एक चाहिए। – Geo
एक समान है, अगर समान नहीं है, तो उपरोक्त विधि को पहले से ही RichString में उपलब्ध है। यदि आप अपनी विधि का उपयोग करना चाहते हैं, तो शायद आप सी को छिपाने के लिए आयात a.b. {c => _} तकनीक का उपयोग कर सकते हैं जहां सी अंतर्निहित विधि नाम है। –