我是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/