加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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
...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读