如何解决在scala中,是否可以阻止编译器先搜索隐式的Predef?
此帖子:
Where does Scala look for implicits?
描述了现代scala编译器使用的隐式搜索优先级和算法。在上面的列表中,直接导入的隐式函数应该比关联类型(例如,在伴随对象中定义)的作用域具有更高的优先级
在大多数情况下,直到直接导入的Predef.scala开始干扰为止,该规则才有意义:
abc
abc 1.0
abcd 0.0
abec 0.0
ab 0.0
abcde 0.0
qwe 0.0
上面的示例应该可以成功编译,但是在Predef中定义的所有类的+运算符覆盖都占据了主导地位,并导致所有带有+运算符的扩展都是无用的(除非在更严格的范围内显式导入)。这很烦人,是否有办法禁用Predef中的隐式或“降低”其优先级?
以上实验已在scala 2.12.12和2.13.3中进行
解决方法
显式导入A._
works,但是您也可以使用-Yimports
,方法是将其添加到build.sbt中,以省去scala.Predef._
导入:
scalacOptions ++= Seq("-Yimports","java.lang","scala")
之后,您可以从Predef
类中的any2stringadd
类中导入所有内容:
import Predef.{any2stringadd => _,_}
Here's是Scastie。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。