Mik*_*yer 6 scala object f-bounded-polymorphism
我不能在Scala中编写以下F-bounded多态.为什么?
trait X[T <: X[T]]
object Y extends X[Y]
Run Code Online (Sandbox Code Playgroud)
我怎样才能表达并编译?
看起来你真的应该能够写作,
trait X[T <: X[T]]
object Y extends X[Y.type]
Run Code Online (Sandbox Code Playgroud)
但是,如果你尝试编译器会给你一个无用的(我认为是虚假的)错误,
scala> object Y extends X[Y.type]
<console>:16: error: illegal cyclic reference involving object Y
object Y extends X[Y.type]
Run Code Online (Sandbox Code Playgroud)
我说"虚假",因为我们可以构建一个具有一点额外基础设施的等效对象,
trait X[T <: X[T]]
trait Fix { type Ytype >: Y.type <: Y.type; object Y extends X[Ytype] }
object Fix extends Fix { type Ytype = Y.type }
import Fix.Y
Run Code Online (Sandbox Code Playgroud)
如果你想在实际代码中试验这个,那么使用一个包对象来代替它object Fix可以使这个习惯用法更加有用.
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |