我想有一個一般的矢量抽象類/性狀,指定某些方法中,例如:適當類層次矢量
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
?
現在我只是實施Vec2D
和Vec3D
沒有一個共同的Vec
祖先,但這是繁瑣的重複代碼。我必須實現所有依賴於這些類的幾何類(例如,Triangle
,Polygon
,Mesh
,...)兩次,一次爲Vec2D
,再次爲Vec3D
。
我看到了java的實現:javax.vecmath.Vector2d
和javax.vecmath.Vector3d
沒有共同的祖先。這是什麼原因?有沒有辦法在scala中克服它?
點。語法是正確的,一切!我猜java不支持這個(否則與javax.vecmath有什麼關係)? – dsg 2011-01-23 12:13:54
其實,我猜java確實支持這個:http://stackoverflow.com/questions/2382915/what-does-this-java-generics-paradigm-do-and-what-is-it-cal-叫 – dsg 2011-01-23 12:56:00