2014-10-04 3 views
2

Я пытаюсь вычислить расстояние между двумя точками, используя класс Scala. Но это дает сообщение об ошибкеРасчет расстояния между точками

тип несоответствие; found: other.type (с базовым типом Point) требуется:? {def x:?} Обратите внимание, что неявные преобразования не являются применимыми, поскольку они неоднозначны: оба метода any2Ensuring в объект Predef типа [A] (x: A) обеспечение [A] и метод any2ArrowAssoc в объекте Predef типа [A] (х: а) ArrowAssoc [а] возможны функции преобразования от other.type к? {защиту х:?}

class Point(x: Double, y: Double) { 
    override def toString = "(" + x + "," + y + ")" 


    def distance(other: Point): Double = { 
    sqrt((this.x - other.x)^2 + (this.y-other.y)^2) 
    } 
} 

ответ

4

Следующие компиляции отлично подходят для меня:

import math.{ sqrt, pow } 

class Point(val x: Double, val y: Double) { 
    override def toString = s"($x,$y)" 

    def distance(other: Point): Double = 
    sqrt(pow(x - other.x, 2) + pow(y - other.y, 2)) 
} 

Я хотел бы также отметить, что ваш Point бы вместо того, чтобы иметь больше смысла в случае класса:

case class Point(x: Double, y: Double) { // `val` not needed 
    def distance(other: Point): Double = 
    sqrt(pow(x - other.x, 2) + pow(y - other.y, 2)) 
} 

val pt1 = Point(1.1, 2.2) // no 'new' needed 
println(pt1) // prints Point(1.1,2,2); toString is auto-generated 
val pt2 = Point(1.1, 2.2) 
println(pt1 == pt2) // == comes free 
pt1.copy(y = 9.9) // returns a new and altered copy of pt1 without modifying pt1 
Смежные вопросы