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