【发布时间】:2011-06-14 00:03:44
【问题描述】:
我想要一个通用的向量抽象类/特征来指定某些方法,例如:
trait Vec
{
def +(v:Vec):Vec
def *(d:Double):Vec
def dot(v:Vec):Double
def norm:Double
}
我想要Vec2D 和Vec3D 扩展Vec:
class Vec2D extends Vec { /* implementation */ }
class Vec3D extends Vec { /* implementation */ }
但是,例如,我怎样才能使Vec2D 只能添加到其他Vec2D 而不能添加到Vec3D?
现在我只是在没有共同的Vec 祖先的情况下实现Vec2D 和Vec3D,但是重复代码会变得乏味。我必须实现所有依赖于这些类的几何类(例如Triangle、Polygon、Mesh、...)两次,一次用于Vec2D,另一次用于Vec3D。
我看到了 java 实现:javax.vecmath.Vector2d 和 javax.vecmath.Vector3d 没有共同的祖先。这是什么原因?有没有办法在scala中克服它?
【问题讨论】:
标签: oop scala architecture hierarchy