scala范围返回Long而不是Int
发布时间:2020-12-16 21:32:00 所属栏目:安全 来源:网络整理
导读:我有以下代码以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.getOrEls
我有以下代码以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? 解决方法
我将隐式转换的名称更改为intWrapperX.下面的会话显示了固定的例子.
问题是,您的intWrapper将scala.Predef.intWrapper(i:Int):创建Range对象所需的RichInt阴影.我留下了为什么转换为Long(或可能的RichLong)的诠释者的解释. scala> :paste // Entering paste mode (ctrl-D to finish) class IntToNumber(num:Int) { val digits = Map("1" -> "one","") } } 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 ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |