Scala:在伴侣对象中使用implicits

Har*_*ara 1 scala compiler-errors implicit implicit-conversion companion-object

我在scala中创建伴随对象并尝试objectclass不导入的情况下使用implictis函数.但无论何时,尝试编译代码我都会收到错误:type mismatch;似乎无法自动导入implictis.以下是我的代码:

object ImplicitTest5 {
    implicit def dollarToRupa(dollar: Dollar): Rupa = { 
        println("calling .... dollarToEuro") 
        Rupa(dollar.value)
    } 

    implicit def dollarToEuro(dollar: Dollar): Euro = { 
        println("calling .... dollarToEuro") 
        Euro(dollar.value)
    } 
}

case class Dollar(value: Double)

case class Euro(value: Double)

case class Rupa(value: Double)

class ImplicitTest5 { 

    private val value = "String"

    def conversion = {
        val euro: Euro  = Dollar(3.1)
        println(s" ----- $euro")
    }
}
Run Code Online (Sandbox Code Playgroud)

当我import ImplicitTest5._在我的班级使用时,它将编译并运行正常.根据Scala中的Programming,Page:478它将正常工作,并且不需要定义导入.

在这种情况下,转换dollarToEuro被称为与Dollar类型相关联.每次需要从Dollar类型的实例转换时,编译器都会找到这样的关联转换.无需将转换单独导入您的程序.

我的样本出了什么问题,或者我的理解是误导性的?

Yuv*_*kov 6

我的样本出了点问题,或者我的理解是误导性的

Dollar如果在Dollars伴随对象中定义转换,则转换将与之关联.目前,所有的implicits都是定义的ImplicitTest5,而不是编译器在Dollar类中查找implicits的地方.这会强制您明确导入包含这些含义的对象.相反,做:

case class Dollar(value: Double)
object Dollar {
  implicit def dollarToEuro(dollar: Dollar): Euro = {
    println("calling .... dollarToEuro")
    Euro(dollar.value)
  }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅"Scala在哪里寻找隐含"