2012-02-13 6 views
10

मैं पत्र में 9 1 से संख्या मुद्रित करने के लिए निम्न कोड हैस्केला रेंज रिटर्न लांग बजाय इंट

class IntToNumber(num:Int) { 
    val digits = Map("1" -> "one", "2" -> "two", "3" -> "three", "4" -> "four", "5" -> "five", "6" -> "six", "7" -> "seven", "8" -> "eight", "9" -> "nine") 
    def inLetters():String = { 
     digits.getOrElse(num.toString,"") 
    } 
} 

implicit def intWrapper(num:Int) = new IntToNumber(num) 
(1 until 10).foreach(n => println(n.inLetters)) 

मुझे इस कोड को चलाने मैं विधि कह कोई त्रुटि मिलती लांग

लिए उपलब्ध नहीं है
Script.scala:9: error: value inLetters is not a member of Long 
(1 until 10).foreach(n => println(n.inLetters)) 
            ^
one error found 

को

(1 until 10).foreach(n => println(n.toInt.inLetters)) 

वर्क्स ठीक अंतिम पंक्ति बदलने ..

किसी की मदद कर सकते हैं मुझे समझने क्यों कि (1 10 तक) लौटने लंबी और नहीं int लेकर है?

+0

परेशान। '(1 10 तक): IndexedSeq [इंट]' कहते अभिव्यक्ति टाइप 'NumericRange.Exclusive [लांग]' है और इसलिए जोड़ना अमान्य है। '(10 तक 1): इंडेक्सडैक [लांग] 'काम करता है। – missingfaktor

+0

एक बग की तरह लगता है। निष्पादन '(1 तक 2) foreach (x => println (x.getClass)) 'लगातार परिणाम नहीं देता है। कभी-कभी यह 'int' प्रिंट करता है, कुछ अन्य बार यह 'लंबा' प्रिंट करता है। – missingfaktor

+0

ओह, ऐसा लगता है कि @ziggystar रहस्य हल किया। :-) – missingfaktor

उत्तर

14

मैं intWrapperX करने के लिए अपने निहित रूपांतरण के नाम बदल दिया है। निम्नलिखित सत्र निश्चित उदाहरण दिखाता है।

समस्या यह है कि intWrapper छाया scala.Predef.intWrapper(i:Int): RichIntRange ऑब्जेक्ट बनाने के लिए आवश्यक है। मैं Long (या अनुमानित RichLong) पर रूपांतरण क्यों टिप्पणी करता हूं, इस बारे में स्पष्टीकरण छोड़ देता हूं।

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

class IntToNumber(num:Int) { 
    val digits = Map("1" -> "one", "2" -> "two", "3" -> "three", "4" -> "four", "5" -> "five", "6" -> "six", "7" -> "seven", "8" -> "eight", "9" -> "nine") 
    def inLetters():String = { 
     digits.getOrElse(num.toString,"") 
    } 
} 

implicit def intWrapperX(num:Int) = new IntToNumber(num)  

// Exiting paste mode, now interpreting. 

defined class IntToNumber 
intWrapperX: (num: Int)IntToNumber 

scala> (1 until 10).foreach(n => println(n.inLetters)) 
one 
two 
three 
... 
+0

+1, शानदार स्पष्टीकरण। –

+0

मेरी इच्छा है कि एसओ ने मुझे जल्द ही आपके उत्तर के बारे में बताया था। यह मुझे अपने लिए यह समझने में 13 मिनट बिताने देता है, फिर मेरे जवाब लिखने के माध्यम से आधा रास्ते मुझे इस बारे में बताया :( – Dylan

+2

बहुत बहुत धन्यवाद! मैंने यह भी सीखा है: पेस्ट मोड, बहुत आसान – mericano1

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