可选方法是可以在类泛型具有特定类型时应用的方法。例子:
list.unzip //works only if this is collection of pairs
list.sum //works only if this collection of numbers
目前我想要实现与解压缩具有相同约束的回归方法(即二维点的集合),但我不知道如何确保该方法(implicit asPair: A => (A1, A2)
存在以及定义此类转换的最佳位置在哪里。
可选方法是可以在类泛型具有特定类型时应用的方法。例子:
list.unzip //works only if this is collection of pairs
list.sum //works only if this collection of numbers
目前我想要实现与解压缩具有相同约束的回归方法(即二维点的集合),但我不知道如何确保该方法(implicit asPair: A => (A1, A2)
存在以及定义此类转换的最佳位置在哪里。
这是TraversableOnce.toMap
确保仅在对的集合上调用它的方法。
def toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] = {
val b = immutable.Map.newBuilder[T, U]
for (x <- self)
b += x
b.result
}
但是,如果您希望将类似的方法添加到现有的集合类中,则可以使其变得更加容易:
class EnhancedIterable[T,U](x: Iterable[(T,U)]) { // CanBuildFrom omitted for brevity
def swapAll() = x.map(_.swap)
}
implicit def enhanceIterable[T,U](x: Iterable[(T,U)]) = new EnhancedIterable(x)
List((1,2), (3,4), (5,6)).swapAll // List((2,1), (4,3), (6,5))
List(1, 2, 3).swapAll // error: value swapAll is not a member of List[Int]