コンパニオンオブジェクトの暗黙が見つかると思いました。これの何が問題なのですか?
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 は彼のブログで次のようにコメントしています。
暗黙的なパラメーター解決と暗黙的なオブジェクト変換を混同しています。暗黙的なオブジェクト変換は潜在的に危険であるため、通常は明示的にスコープにインポートする必要があります。
それに対する注意点は、スーパークラスで定義された暗黙的なオブジェクト変換であり、(私はかなり確信しています) パッケージ内のオブジェクトは自動的にスコープ内にあります。
これは私には理にかなっていますが、なぜMyInt
上記の例が機能するのでしょうか?