диапазон scala возвращает Long вместо Int - PullRequest
10 голосов
/ 13 февраля 2012

У меня есть следующий код для печати цифр от 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))

Когда я запускаю этот код, я получаю сообщение об ошибке, сообщающее, что метод недоступен для Long

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) возвращает Long, а не int?

1 Ответ

14 голосов
/ 13 февраля 2012

Я изменил имя вашего неявного преобразования на intWrapperX.Следующий сеанс показывает фиксированный пример.

Проблема в том, что ваши intWrapper тени scala.Predef.intWrapper(i:Int): RichInt необходимы для создания объекта Range.Я оставляю объяснение того, почему преобразование в 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
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...