Учитывая приведенный ниже код, метод foo
должен сравнить операторно заданный параметр bar
с все lowerBound
и upperBound
относятся к одному и тому же абстрактному типу Bar
.
trait Foo {
type Bar <: Ordered[Bar]
val lowerBound: Bar
val upperBound: Bar
def foo(bar: Bar) = bar >= lowerBound && bar <= upperBound
}
Таким образом можно определить свойство Foo
. Проблемы начинаются с нижеследующего конкретного класса FooImpl
.
class FooImpl extends Foo {
type Bar = Int
val lowerBound = 0
val upperBound = 5
}
Я понимаю, что scala.Int
не реализует то, что scala.runtime.RichInt
, а фактически scala.math.Ordered [Int]
. Определение типа Bar
как RichInt
вместо этого не работает, поскольку не соответствует scala.math.Ordered [RichInt]
. Моя третья попытка определить тип Bar
как Ordered [Ord]
, где Ord
объявлен как , type Ord
и определение его в FooImpl
as Int
также не работал.
Как могло бы выглядеть возможное закрытое решение?