在my answer到this question,我对以下代码不起作用感到惊讶。
scala> abstract class Foo {
| type Repr_Tpe <% Ordered[Repr_Tpe]
| }
<console>:2: error: `=', `>:', or `<:' expected
OP表示用类型参数替换抽象类型不是一种选择。有没有办法表达一个抽象类型的视图?
答案 0 :(得分:7)
A <% B
只是“具有类型A => B
的隐式值参数”的糖。那么你想要的是:
abstract class Foo {
type Repr_Tpe
implicit def orderify: (Repr_Tpe => Ordered[Repr_Tpe])
}
当然,实现必须在指定类型的同时提供orderify
的实际实现。可能类似
class Bar extends Foo {
type Repr_Tpe = Int
val orderify = implicitly[Int => Ordered[Int]]
}
或
class Baz[A <% Ordered[A]] extends Foo {
type Repr_Tpe = A
val orderify = implicitly[A => Ordered[A]]
}