В качестве упражнения я должен реализовать черту PartialOrdered [T].Реализующая черта PartialOrdered [T]
trait PartialOrdered[T] {
def below(that: T): Boolean
def < (that: T): Boolean = (this below that) && !(that below this)
/* followed by other relations <=, >, >=, ==, .. */
}
Класс K, который расширяет эту черту должен быть ниже реализован таким образом, что
a.below(b: K) = { true if a <= b,
false in any other case
Однако компилирование выдает следующую ошибку:
value below is not a member of type parameter T
def < (that: T): Boolean = (this below that) && !(that below this)
^
Так что мне не хватает? Заранее спасибо
Edit: Это пример класса Rectangle (в системе координат), с двумя противоположными углами учитывая, где прямоугольник ниже другой, если он полностью включен
case class Rectangle (x1: Int, y1: Int, x2: Int, y2: Int)
extends PartialOrdered[Rectangle] {
def below(r: Rectangle): Boolean = {
val (rx, ry) = r.topLeft
val (tx, ty) = this.topLeft
tx >= rx && ty <= ry &&
tx + this.width <= rx + r.width &&
ty - this.height >= ry - r.height
}
def width: Int = {...}
def height: Int = {...}
def topLeft:(Int, Int) = {...}
}
Это работает, но превышает то, что я узнал раньше. Я пробовал что-то подобное, которое не работало с '<%' вместо '<:' Также в чем цель 'this: T =>'? – marius