次の暗黙の方法が適用されないのはなぜですか?また、X
のインスタンスをY
のインスタンスに自動的に変換し、暗黙的にConversion[X,Y]
というスコープを持つようにするにはどうすればよいですか。暗黙の変換が機能しない
trait Conversion[X, Y] {
def apply(x: X): Y
}
implicit object Str2IntConversion extends Conversion[String, Int] {
def apply(s: String): Int = s.size
}
implicit def convert[X, Y](x: X)(implicit c: Conversion[X, Y]): Y = c(x)
val s = "Hello"
val i1: Int = convert(s)
val i2: Int = s // type mismatch; found: String required: Int
最後の行が動作するために、あなたはSTRING'に 'Int''からの暗黙的な変換を必要とします、例えば'暗黙的に[String => Int] ' - 存在しない。ここで問題となるのは、 'Y'がパラメータであり、Scalaはあなたが探している型に代わるものではありません。たとえば、暗黙的なdef convert [X](x:X)(暗黙のc:Conversion [X、Int]):Int = c(x) 'は動作します。 –