4

如果我有隐含的 from Ato B,我怎样才能自动获取隐含的 from F[A]to F[B]

例如,如果我有implicit toInt[A](l: List[A]) = l.size并且现在我想要一个隐式 from(List[A], Int)(Int, Int)重用toInt隐式。这在 Scala 中是否可行?

4

1 回答 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声明了一个视图绑定,要求在调用范围内进行隐式转换AInt

看起来可能会出现以下情况:

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 的副本,它仍然是开放的)

于 2014-04-28T02:51:17.810 回答