希望这将是一个关于图书馆拉皮条的简单问题(因为关于该主题的其他问题往往会产生超出我当前技能水平的答案)。
我想要做的就是映射一个集合的叉积与它自己。
val distances = points.crossMap(_ distance _) // points: List[Point3d]
所以我试图这样拉皮条Traversable
:
implicit def toSelfCrossMappable[A](xs: Traversable[A]) = new {
def crossMap[B](f: (A, A) => B) = xs.flatMap(a => xs.map(f(a, _)))
}
但它不起作用(它没有进行隐式转换)而且我不明白为什么不(我对 scala 很陌生)。我还尝试了使用丰富 Scala 集合中建议的方法,该方法给我留下了:
implicit def toSelfCrossMappable[A, C[A]](xs: C[A])(implicit c: C[A] => Traversable[A]) = new SelfCrossable[A, C[A]](xs)(c)
class SelfCrossable[A, C](xs: C)(implicit c: C => Traversable[A]) {
def crossMap[B](f: (A, A) => B) = xs.flatMap(a => xs.map(f(a, _)))
}
,但这会引发与我的(看起来更简单的)方式相同的错误。
我在这里做错了什么?