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