1
我在scala中创建伴侣对象并试图在class
中尝试使用object
隐含功能而不导入。但是,无论何时,试图编译代码我得到一个错误:type mismatch;
似乎它不能自动导入implictis。以下是我的代码:Scala:在伴侣对象中使用隐含
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")
}
}
当我在我的课堂采用import ImplicitTest5._
,它会编译并运行良好。根据Programming in Scala, Page: 478它将工作正常,并且不需要定义导入。
在这种情况下,转换dollarToEuro据说被关联到 类型元。每次需要从Dollar类型的实例转换时,编译器都会找到这样的关联转换 。 无需将转换单独导入到您的程序中。
我的样品出现问题或我的理解有误导性?
嘿@Yuval,如果我们在本书一看,美元是不是我们的'情况下class',这是简单的类。 –
@HarmeetSinghTaara无关紧要,无论是“case class”还是“class”,它都会查看它是否有定义的伴侣对象,如果有,请在其中查找隐含对象。它不会在'Dollar'上隐式定义'ImplicitTest5'。 –
嘿@Yuval我明白你的观点,我的理解是误导。谢谢你的帮助。 –