1
我认为会发现伴侣对象中的隐含。这有什么问题?伴侣中的隐式类
object Elsewhere{
case class NamedInt(i: Int, name: String)
object NamedInt{
implicit class ToNamedInt(i: Int){
def named(name: String) = NamedInt(i, name)
}
}
}
object Application{
import Elsewhere.NamedInt
//Error: value named is not a member of Int
val named: NamedInt = 3.named("bob")
}
更新:我知道我可以直接导入隐含的类,但我认为它不应该把它编译,因为隐含在同伴对象。例如。这个工作没有额外的进口
object Elsewhere{
case class MyInt(i: Int)
object MyInt{
import scala.language.implicitConversions
implicit def myIntToSome(t: MyInt): Some[Int] = Some(t.i)
}
}
object Application{
import Elsewhere.MyInt
val o: Option[Int] = MyInt(1)
}
更新2:
Jesse Eichar comments on his blog:
你混淆了隐含参数分辨率隐式对象 转换。隐式对象转换有潜在危险,因此通常必须将其明确导入到作用域中。
注意到这是在超类 中定义的隐式对象转换,并且(我非常确定)包对象中的对象自动转换为范围。
这对我有意义,但为什么MyInt
上面的例子工作?
这是我的解决办法,但我认为它没有因为隐含在同伴对象会工作。已添加更新与类似的东西,工程。 – Pengin