Scala 编译器似乎忽略了类型细化中的类型绑定
下面代码中的类型细化似乎表明路径相关类型Scala 编译器似乎忽略了类型细化中的类型绑定,scala,type-inference,path-dependent-type,type-bounds,Scala,Type Inference,Path Dependent Type,Type Bounds,下面代码中的类型细化似乎表明路径相关类型vt.ValueT包括this.type: trait ValueType { type ValueT <: Value type ConstrainedT <: ConstrainedValue def makeConstrainedValue(v: ValueT): ConstrainedT = ??? } trait Value { type ValueTypeT <: ValueType { type Val
vt.ValueT
包括this.type
:
trait ValueType {
type ValueT <: Value
type ConstrainedT <: ConstrainedValue
def makeConstrainedValue(v: ValueT): ConstrainedT = ???
}
trait Value {
type ValueTypeT <: ValueType { type ValueT >: this.type } // <--- HEY, COMPILER, READ THIS
val vt: ValueTypeT
def asConstrainedValue = vt.makeConstrainedValue(this) // <--- Compiler complains here
}
trait ConstrainedValue { /* details omitted */ }
我想问题是在绑定的
:this.type
中,this
的绑定被编译器搞糊涂了。如果我进行以下更改(&removeoverride
fromasConstrainedValue
),编译将成功:
trait Value { self =>
type ValueTypeT <: ValueType { type ValueT >: self.type }
…
trait值{self=>
类型值typet:self.type}
…
谢谢!它起作用了!你认为这里需要self=>
可能有什么原因吗?我真的不知道,对不起。啊,我想我刚刚弄明白了:类型细化中的这个指的是ValueTypeT
对象,而不是Value
对象。
trait Value { self =>
type ValueTypeT <: ValueType { type ValueT >: self.type }
…