scala implicit 仅在使用时导入

scala implicit gets imported only on use

我是 scala 的新手,正在尝试一些动手练习。

我正在尝试通过将隐含项放在伴随对象中来使用隐含项。但是,编译器不会检测 implicit 除非它被使用。

class ImplicitTest {
    import Implicits.implicitInt;
    println(implicitInt)
    def implicitm1(implicit i : Int) = 1
    println(implicitm1)
}
object Implicits {
    implicit val implicitInt = 1
}

这编译得很好。但是,如果我注释掉第三行

\println(implicitInt)`

然后我在

上遇到编译时错误
println(implicitm1)` 

表示

could not find implicit value for parameter i:Int`

not enough arguments for method implicit m1(implicit i:Int) . Unspecified value parameter i`

我做错了什么?

提前致谢

如果您包含 val implicitInt: Int = 1 的类型,它会起作用。此类问题是建议始终为隐式指定类型的原因之一。

Scala 类型推断从上到下进行,因此在您的情况下,编译器在对 println(implicitm1) 行进行类型检查时还不知道此类型。

我想当你包含 println(implicitInt) 时,编译器被迫在该行查找 implicitInt 的类型。

另一个解决方案是将对象 Implicits 定义移动到 class ImplicitTest 之上。

在这种情况下,已经推断出 implicitInt 的类型。