2011-09-19 8 views
14

मैं अभी भी सीख रहा हूँ स्काला, और जब मैं koans में एक उदाहरण भर में भाग गया, मैं समझ नहीं पा क्यों काम करता नहीं था:क्या स्काला सुविधा प्लस ऑपरेटर को किसी भी पर इस्तेमाल करने की अनुमति देता है?

var foo : Any = "foo" 
println(foo + "bar") 

किसी भी एक + विधि

उत्तर

22

नहीं है

:

implicit def any2stringadd(x: Any): StringAdd 

StringAdd एक + ऑपरेटर/विधि को परिभाषित करता है: वहाँ scala.Predef वस्तु में एक अंतर्निहित रूपांतरण है 210

def +(other: String) = String.valueOf(self) + other 

इसके अलावा, स्कैला के बाद से। प्रीफ हमेशा गुंजाइश में है, यह निहित रूपांतरण हमेशा काम करेगा।

+4

'स्ट्रिंग एड '' scala.runtime' में रहता है ([गीथूब पर स्रोत कोड] (https://github.com/scala/scala/blob/master/src/library/scala/runtime/StringAdd.scala)) । मुझे यकीन नहीं है कि यह क्यों [ScalaDoc] में दिखाई नहीं देता है (http://www.scala-lang.org/api/current/index.html#scala.runtime.package)। –

+0

लिंक के लिए धन्यवाद- मैंने इसे अपने उत्तर – Dylan

+0

@ किपटन इंटरस्टेस्टिंग "स्केलैडोक में नहीं" में जोड़ा है, क्या कोई अन्य लक्षण/ऑब्जेक्ट्स स्केलाडोक में नहीं हैं? (एक स्केलैडोक में प्रत्येक स्केल विशेषता/ऑब्जेक्ट को ढूंढने का अनुमान लगाता है) मुझे एक नए एसओ प्रश्न के लायक लगता है ... –

1

यह अंतर्निहित रूपांतरणों के कारण काम करता है जो "फिक्स" कुछ प्रकार की त्रुटियों के लिए रूपांतरण प्रदान किए गए हैं।

http://www.artima.com/pins1ed/implicit-conversions-and-parameters.html#21.2

वास्तव में यह यह बहुत ही उदाहरण x + y का उपयोग करता है यह कैसे काम करता व्याख्या करने के लिए: यहाँ निहित रूपांतरण की व्यवस्था के बारे में अधिक जानकारी है। यह पुस्तक के पहले संस्करण से है, लेकिन स्पष्टीकरण अभी भी मान्य है।

संबंधित मुद्दे

 संबंधित मुद्दे