これはthis questionのフォローアップです。scala self-type:valueはメンバエラーではありません
Iは、自己のタイプを使用して、一般的なスーパークラスとScalaの中のベクトルを実装しようとしています:
trait Vec[V] { self:V =>
def /(d:Double):Vec[V]
def dot(v:V):Double
def norm:Double = math.sqrt(this dot this)
def normalize = self/norm
}
はここ3次元ベクトルの実装です:
class Vec3(val x:Double, val y:Double, val z:Double) extends Vec[Vec3]
{
def /(d:Double) = new Vec3(x/d, y/d, z/d)
def dot(v:Vec3) = x * v.x + y * v.y + z * v.z
def cross(v:Vec3):Vec3 =
{
val (a, b, c) = (v.x, v.y, v.z)
new Vec3(c * y - b * z, a * z - c * x, b * x - a * y)
}
def perpTo(v:Vec3) = (this.normalize).cross(v.normalize)
}
残念ながら、これにはありませんコンパイル:
Vec3.scala:10: error: value cross is not a member of Vec[Vec3]
def perpTo(v:Vec3) = (this.normalize).cross(v.normalize)
^
どうしたらいいですか?どうすれば修正できますか?
さらに、自己のタイプに関する参考文献は、これらのエラーが私の理解の欠如から切り取っていると思うので、高く評価されます。
ありがとうございます。私はこれが私の元の質問に対する適切な答えだと信じています:http://stackoverflow.com/questions/4773611/proper-class-hierarchy-for-2d-and-3d-vectors。私はあなたにポイントを与えることができるので、そこに投稿してもらえますか? – dsg