Scala中Int是否为Ordered类型?编译报错疑缺隐式导入
关于Scala中Int与Ordered类型的问题解答
哈哈,这个坑很多刚接触Scala的同学都会踩!你猜的没错——问题确实出在隐式转换的导入上。
先给你掰扯清楚:Scala里的Int本身并没有直接实现Ordered[Int]这个trait,咱们平时能对Int用compare方法或者把它当Ordered类型用,全靠隐式转换在背后帮忙。但这些转换不是全局自动生效的,得手动导入才行。
怎么解决?
直接在代码开头加这行导入就行:
import scala.math.Ordering.Implicits._
要是你用的是Scala 2.x版本,也可以导入:
import scala.math.Ordered._
导入之后,编译器就能自动把Int转换成Ordered[Int]的实例,你之前的编译错误应该就消失了。
额外唠两句
- 为啥平时用
<、>这些运算符没问题?因为Predef里默认导入了基础的比较隐式转换,但如果是在泛型场景(比如写一个要求T <: Ordered[T]的函数),就必须导入上面的转换才能让Int满足这个约束。 - Scala 3里隐式机制有调整,但上面的导入依然管用,而且很多时候编译器会自动帮你找,但显式导入能避免不少奇怪的问题。
内容的提问来源于stack exchange,提问作者Clovis
相关产品推荐
相关产品推荐

