Har*_*ara 1 scala compiler-errors implicit implicit-conversion companion-object
我在scala中创建伴随对象并尝试object
在class
不导入的情况下使用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类型的实例转换时,编译器都会找到这样的关联转换.无需将转换单独导入您的程序.
我的样本出了什么问题,或者我的理解是误导性的?
我的样本出了点问题,或者我的理解是误导性的
Dollar
如果在Dollar
s伴随对象中定义转换,则转换将与之关联.目前,所有的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在哪里寻找隐含"