如果我有隐含的 from A
to B
,我怎样才能自动获取隐含的 from F[A]
to F[B]
?
例如,如果我有implicit toInt[A](l: List[A]) = l.size
并且现在我想要一个隐式 from(List[A], Int)
来(Int, Int)
重用toInt
隐式。这在 Scala 中是否可行?
如果我有隐含的 from A
to B
,我怎样才能自动获取隐含的 from F[A]
to F[B]
?
例如,如果我有implicit toInt[A](l: List[A]) = l.size
并且现在我想要一个隐式 from(List[A], Int)
来(Int, Int)
重用toInt
隐式。这在 Scala 中是否可行?
隐式可以使用其他隐式来转换值。因此,鉴于您的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 的副本,它仍然是开放的)