Scala中为何变量无法使用`to`方法?如何解决该问题?
为什么Scala中变量无法和
to搭配使用? 问题根源
这个问题其实是Scala原生数值类型和Java包装类的区别在搞鬼!你代码里声明的id_last_pivot是java.lang.Integer类型(注意首字母大写的Integer),而Scala里的to方法是**Scala原生数值类型(比如Int)**专属的方法,Java的Integer包装类根本没有这个方法。
当你用具体数值(比如0)的时候,Scala会自动把它识别为原生的Int类型,所以0 to content.length能正常调用to方法;但你把变量声明为Integer时,这个变量是Java包装类的实例,编译器找不到对应的to方法,自然就报"Cannot resolve symbol to"的错误了。
解决方法
这里有几个简单的处理思路,你可以根据自己的场景选择:
改用Scala原生
Int类型(最推荐)
直接把变量类型换成Scala的Int,代码就能正常运行:var id_last_pivot: Int = 0 (id_last_pivot to content.length).maxBy(...)Scala的
Int和Java的Integer可以自动互相转换(通过隐式转换),日常开发用原生类型更符合Scala的编码习惯,也能避免这类方法缺失的问题。显式转换为Scala
Int
如果因为某些限制必须保留Integer类型,可以先调用toInt方法把它转成Scala的Int,再使用to:var id_last_pivot: Integer = 0 (id_last_pivot.toInt to content.length).maxBy(...)利用Scala的隐式转换(不推荐)
Scala默认有Integer到Int的隐式转换,但某些复杂场景下编译器可能没触发,你可以手动导入隐式转换确保生效:import scala.jdk.IntegerConverters._ var id_last_pivot: Integer = 0 (id_last_pivot to content.length).maxBy(...)不过这种方式不如显式转换清晰,容易让其他开发者困惑,所以优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者JarsOfJam-Scheduler
相关产品推荐
相关产品推荐

