から暗黙的に持っている場合 A
に B
、どのようにしてから暗黙の自動取得を行うことができますか F[A]
に F[B]
?
たとえば、私が持っている場合 implicit toInt[A](l: List[A]) = l.size
そして今、私はから暗黙のうちにしたい (List[A], Int)
に (Int, Int)
再利用する toInt
暗黙。 Scalaでもそれは可能ですか?
回答:
回答№1は4暗黙的は、他の暗黙的を使用して値を変換できます。だからあなたの与えられた toInt
:
implicit def toInt[A](l: List[A]): Int = l.size
2タプルの最初の要素を変換する暗黙的な変換を定義できます Int
。 (List[Int], Int)
に (Int, Int)
:
implicit def tupleConvert[A <% Int, C](x: (A, C)): (Int, C) = (x._1, x._2)
ザ A <% Int
ビューバインドを宣言し、暗黙的な変換が必要です A
に Int
呼び出しスコープで使用可能になります。
次のように見えるかもしれません:
implicit def tupleConvert2[A <% B, B, C](x: (A, C)): (B, C) = (x._1, x._2)
タイプの2タプルを変換できるようにします (A, C)
に (B, C)
からの変換が与えられた A
に B
。ただし、Scalaが暗黙的に型パラメーターを解決する方法のため、これは機能しません*。
*(これはバグの可能性があります。SI-2046によく似ています。これは、まだオープンされているSI-3340の複製です)