Scala中的数据抽象

时间:2014-08-10 04:25:30

标签: scala

enter image description here我们在scala中遇到了一个问题,即定义一个以线段作为参数并返回其中点(其坐标为端点坐标平均值的点)的过程。我尝试编译程序,它给我两个错误,即我的midpointSegment方法中的类型不匹配错误。我不明白为什么它需要一个字符串。谁能指出我的错误?以下是我的代码。

class Point(x: Int, y: Int) {
  def xCoord = x
  def yCoord = y    

  def makeString(m: Point) = "Point" + "(" + x + "," + y + ")" 
}

class LineSegment(x: Point, y: Point) {
  def startSeg = x
  def endSeg = y

  def midpointSegment(m: LineSegment) = ((startSeg + m.startSeg) / 2, 
    (endSeg + m.endSeg) / 2)

  def makeString(m: LineSegment) = 
    "LineSegment" + "(" + x.makeString(x) + "," + y.makeString(y) + ")"
}

object Mp5 {
  def main(args: Array[String]): Unit = {   
    val aLine1 = new Point(1, 2)
    val aLine2 = new Point(5, 4)
    val aLineSegment1 = new LineSegment(aLine1, aLine2)
    val aLineSegment2 = new LineSegment(new Point(-3, 5), new Point(8, -1))

    println(aLine1.makeString(aLine1))
    println(aLine2.makeString(aLine2))
    println(aLineSegment1.makeString(aLineSegment1)) 
    println(aLineSegment2.makeString(aLineSegment2))

    println(aLineSegment1.midpointSegment(aLineSegment2))
  }
}

1 个答案:

答案 0 :(得分:2)

您尝试添加两个点,因为startSegm.startSeg是积分。您尚未定义如何执行此操作,因此编译器似乎认为您正在添加字符串(因为任何内容都可以添加到字符串中,如toString的定义)。说实话,如果这是整个代码,我不会指望这个错误,而是关于缺少+方法的东西。

供将来参考:1。提供实际的错误信息和堆栈跟踪; 2.您不需要在Scala中定义def xCoord = x之类的方法,只需在类参数中编写val x而不是简单x; 3.阅读案例类。