У меня есть этот код, который я не могу заставить работать. Код должен позволить вам определить, перекрывают ли ограничивающие прямоугольники и прямоугольник друг друга.Scala Тип Несоответствие с вложенным вызовом функции
abstract class Shape
case class Circle(r: Double, x: Double, y: Double) extends Shape
case class Rectangle(llx: Double, lly: Double, w:Double, h:Double) extends Shape
def boundingBox(s: Shape): Rectangle = s match {
case Rectangle(llx, lly, w, h) => Rectangle(llx, lly, w, h)
case Circle(r,x,y) => Rectangle(x-r, y-r, 2*r, 2*r)
}
def mayOverlap(s1: Shape, s2: Shape) = overlapRect(boundingBox(s1), boundingBox(s2))
def overlapRect(r1: Rectangle, r2: Rectangle) = betweenLine(r1.llx, r1.w, r2.llx, r2.w) && betweenLine(r1.lly, r1.h, r2.lly, r2.h)
def betweenLine(x: Double, l: Double, a: Double, k: Double): Boolean = (a <= x+l) || (a+l <= x+l)
Все функции работают правильно, за исключением mayOverlap. Когда я загружаю эти функции в интерпретатор, я получаю обратно следующее сообщение об ошибке:
<console>:63: error: type mismatch;
found : Rectangle(in object $iw)
required: Rectangle(in object $iw)
def mayOverlap(s1: Shape, s2: Shape) = overlapRect(boundingBox(s1), boundingBox(s2))
^
<console>:63: error: type mismatch;
found : Rectangle(in object $iw)
required: Rectangle(in object $iw)
def mayOverlap(s1: Shape, s2: Shape) = overlapRect(boundingBox(s1), boundingBox(s2))
Я новичок в Скале, я гораздо больше знаком с Haskell, так что это возможно, я делаю предположение о сходстве между два, но я попытался упростить его, и я не могу вообще делать какие-либо вложенные вызовы функций в mayOverlap.
Какую версию Scala вы используете? Я не могу воспроизвести это в REPL. –