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

我试图通过将隐式对象放置在同伴对象中来使用隐式对象。但是,除非使用编译器,否则编译器不会检测到隐式的。

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的类型。

关于scala - Scala隐式仅在使用时导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37313939/

10-10 02:37