scala implicit 仅在使用时导入

pander-it 阅读:19 2025-01-19 22:14:33 评论:0

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


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号