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))
}
}