4

私は Scala を使い始めたばかりで、いくつかのチュートリアルに取り組んでいます。コンパニオン オブジェクトに出会い、それらをファクトリとして使用しました。私はいくつかのことを試しました。ただし、次のものが適切に機能していません。それについて私の頭を理解することはできません..

import math._

abstract class Point{
  // ...
}
object Point{
  private class PointInt(val x:Int,val y:Int) extends Point{
    def +(that:PointInt) = new PointInt(this.x + that.x, this.y + that.y)
    def distance(that:PointInt) = 
      sqrt(pow((this.x - that.x), 2) + pow((this.y - that.y), 2))
  }
  private class PointDouble(val x:Double,val y:Double) extends Point{
    def +(that:PointDouble) = new PointDouble(this.x + that.x, this.y + that.y)
    def distance(that:PointDouble) = 
      sqrt(pow((this.x - that.x), 2) + pow((this.y - that.y), 2))
  }
  def apply(x:Int,y:Int):Point = new PointInt(x,y)
  def apply(x:Double,y:Double):Point = new PointDouble(x,y)
}

val a = Point(1,2)
val b = Point(3,4)
val c = a+b // does not work... 

メソッドで定義したように、2つの整数ポイントを合計しようとしているだけです...誰かが私が間違っていることを知っていますか??

編集:次の(作業中の)クラスをファクトリにラップしようとしていました。

class Point(val x:Int,val y:Int){
  def +(that:Point) = new Point(this.x + that.x, this.y + that.y)
  def distance(that:Point) = sqrt(pow((this.x - that.x),2) + pow((this.y - that.y),2))

}

val a = new Point(1,2)              //> a  : week1.OU2.Point = week1.OU2$Point@73e48fa7
val b = new Point(3,4)              //> b  : week1.OU2.Point = week1.OU2$Point@677bb8fe
val c = a+b                         //> c  : week1.OU2.Point = week1.OU2$Point@6bae60c5
c.x                                 //> res0: Int = 4
c.y                                 //> res1: Int = 6
4

1 に答える 1