【发布时间】:2012-02-14 03:52:32
【问题描述】:
我有以下代码可以用字母打印从 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 until 10) : IndexedSeq[Int]表示表达式的类型为NumericRange.Exclusive[Long],因此归属无效。(1 until 10) : IndexedSeq[Long]有效。 -
似乎是一个错误。执行
(1 until 2) foreach (x => println(x.getClass))不会给出一致的结果。有时打印int,有时打印long。 -
哦,看来@ziggystar 解开了这个谜。 :-)