scala范围返回Long而不是Int

mer*_*no1 10 types scala

我有以下代码用字母打印从1到9的数字

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))
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到一条错误消息,指出该方法不适用于Long

Script.scala:9: error: value inLetters is not a member of Long
(1 until 10).foreach(n => println(n.inLetters))
                                    ^
one error found
Run Code Online (Sandbox Code Playgroud)

将最后一行更改为

(1 until 10).foreach(n => println(n.toInt.inLetters))
Run Code Online (Sandbox Code Playgroud)

工作良好..

有人可以帮助我理解为什么那个(1到10)范围返回Long而不是int?

zig*_*tar 14

我已将隐式转换的名称更改为intWrapperX.以下会话显示了修复示例.

问题是,创建对象所需的intWrapper阴影.我留下了解释为什么转换为(或推测)开始进入评论者的原因.scala.Predef.intWrapper(i:Int): RichIntRangeLongRichLong

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
...
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!我还学到了:粘贴模式,非常方便 (2认同)