0
に特定のマップ・メソッドを追加するだから私はVEC2クラスを持っている:はコレクション/ファンクタ
class Vec2(val x: Double, val y: Double)
{
def +(other: Vec2): Vec2 = Vec2(x + other.x, y + other.y)
def -(other: Vec2): Vec2 = Vec2(x - other.x, y - other.y)
def *(factor: Double): Vec2 = Vec2(x * factor, y * factor)
def /(divisor: Double): Vec2 = Vec2(x/divisor, y/divisor)
//Other methods omitted but you get the idea
}
私は、このクラスをたくさん使用して、私はそれをコレクションにたくさん使うので、私は.MAPための短い手の方法を希望します(2番目の:Vec2、factor:Double)とmultAddAll(factor:Double、second:Vec2)のメソッドを追加したいと思っています。明示的な方法として。
私は暗黙のうちにトラバーサルクラスを選択しました。これは私が使うことができる最高の/最も一般的なクラスですか?私はscalaのソースコードからmapメソッドを浮き沈みして修正しました。以下のコードは正しいですか?問題なく動作しますか?
object Vec2
{
import collection.mutable.{ Builder }
import scala.collection._
implicit class ImpVec2Class[+Repr](travLike: TraversableLike[Vec2, Repr])
{
def +++ [That](offset: Vec2)(implicit bf: generic.CanBuildFrom[Repr, Vec2, That]): That =
{
def builder =
{ // extracted to keep method size under 35 bytes, so that it can be JIT-inlined
val b = bf(travLike.repr)
b.sizeHint(travLike)
b
}
val b = builder
for (x <- travLike) b += x + offset
b.result
}
}
}
は私が短縮方法をしたい場合はダブルのマップ・メソッドのためにこれを行う必要があり、またはScalaz/CATSは、すでにそれらを含めるんですか?