斯卡拉范围返回龙,而不是诠释
问题描述:
我有以下代码打印从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))
当我运行这段代码我得到一个错误说的方法不可长期
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?
答
我已将您的隐式转换的名称更改为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
...
令人费解。 '(1至10):IndexedSeq [Int]'表示表达式的类型为'NumericRange.Exclusive [Long]',因此归属无效。 '(1至10):IndexedSeq [Long]'起作用。 – missingfaktor 2012-02-13 13:14:53
看起来像一个错误。执行'(1到2)foreach(x => println(x.getClass))'不会产生一致的结果。有时会打印“int”,有时会打印“long”。 – missingfaktor 2012-02-13 13:16:27
哦,看起来像@ ziggystar解决了这个谜。 :-) – missingfaktor 2012-02-13 13:17:33