给出的方法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