我正在编写一个2D Vector类,其声明如下:
case class Vec2(x:Float, y:Float) extends (Float, Float)(x, y) {
def +(v:Vec2) = Vec2(v.x+x, v.y+y)
//Subtract, dot product, projection, etc.
...
...
}
Run Code Online (Sandbox Code Playgroud)
我希望能够写出像Vec2(3, 7) + (2, 9)我写的那样的东西
scala> implicit def ii2v2(i:(Int, Int)) = Vec2(i._1, i._2)
ii2v2: (i: (Int, Int))org.zhang.lib.misc.Vec2
scala> Vec2(2, 6) + (3, 1)
res25: org.zhang.lib.misc.Vec2 = (5.0,7.0)
Run Code Online (Sandbox Code Playgroud)
大.但是,如果我尝试Vec2(3, 7) + (2.6f, 9.3f),隐含将不起作用,因为(Float, Float)不匹配(Int, Int).我想出的唯一解决方案就是写出四个暗示(Int,Int), (Int, Float), (Float, Int), and (Float, Float).
当你试图考虑双打或者写一个Vec3类时,这个问题会变得荒谬.有没有解决的办法?我可以只是Vec2-ify所有东西,但我的一部分真的想要添加(Int,Int)到Vec2 :)