Scala没有返回正确的值

Scala没有返回正确的值,scala,Scala,所以我试图运行这段代码,但当我试图打印线段时,它无法正确显示 println(aLineSegment1.makeString(aLineSegment1)) 给出>LineSegment@77c2bc0d 你知道怎么解决这个问题吗 class Point(x: Int, y: Int) { def xCoord = x def yCoord = y def makeString(m: Point) = "Point" + "(" + x +

所以我试图运行这段代码,但当我试图打印线段时,它无法正确显示

println(aLineSegment1.makeString(aLineSegment1))
给出
>LineSegment@77c2bc0d

你知道怎么解决这个问题吗

class Point(x: Int, y: Int) {

    def xCoord = x
    def yCoord = y  

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

您没有从
LineSegment.makeString()
方法调用
点的
makeString()
方法。您可以通过进行以下更改来完成此操作:

def makeString(m: LineSegment) = 
    "LineSegment" + "(" + x.makeString(x) + "," + y.makeString(y) + ")"
然而,在Java/Scala中,通常重写对象到字符串转换的方法。如果您这样做,转换将被自动调用,而无需自己调用该方法

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

    override def toString = "Point" + "(" + x + "," + y + ")" 
}

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

    override def toString = "LineSegment" + "(" + x + "," + 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)

        println(aLineSegment1)
        // Prints out: LineSegment(Point(1,2),Point(5,4))
    }
}

哦,我现在明白了。还有什么可以打印而不必定义makeString方法的吗?@renzfizgeraldiban如果您可以使用scala,它会在后台为您自动生成
toString()
方法。
def makeString(m: LineSegment) = 
    "LineSegment" + "(" + x.makeString(x) + "," + y.makeString(y) + ")"
class Point(x: Int, y: Int) {
    def xCoord = x
    def yCoord = y  

    override def toString = "Point" + "(" + x + "," + y + ")" 
}

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

    override def toString = "LineSegment" + "(" + x + "," + 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)

        println(aLineSegment1)
        // Prints out: LineSegment(Point(1,2),Point(5,4))
    }
}