2016-10-06 4 views
0

У меня есть этот код, который я не могу заставить работать. Код должен позволить вам определить, перекрывают ли ограничивающие прямоугольники и прямоугольник друг друга.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.

+0

Какую версию Scala вы используете? Я не могу воспроизвести это в REPL. –

ответ

0

Я решил проблему, переупорядочивая объявления функций, поэтому первые вложенные вспомогательные функции были первыми.

Смежные вопросы