給出的方法foo
下面的代碼應該比較操作者明智給定參數bar
與lowerBound
和upperBound
所有是相同的抽象類型Bar
的。如何比較Scala特徵中的有序抽象類型?
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
類型定義爲,其中Ord
被宣佈爲type Ord
並將其定義爲FooImpl
,因爲Int
也不起作用。
一個可能接近的解決方案將如何看起來像?
是的,如果OP願意把Foo變成一個抽象類,那麼'Bar'類型的成員可以廢除,Foo的第一行的聲明可以作爲「抽象類Foo [Bar <%Ordered [酒吧]]」。這可能會比在一種方法上強制執行這種關係更好。 – Destin 2012-02-13 01:45:01