下面代码中的类型细化似乎表明路径相关类型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 */ }
但 Scala 编译器(版本 2.11.2)说:
error: type mismatch;
found : Value.this.type (with underlying type Test.Value)
required: Value.this.vt.ValueT
override def asConstrainedValue = vt.makeConstrainedValue(this)
^
有什么理由在这里推断this.type <: vt.ValueT
是非法的吗?还有另一种方法可以告诉编译器它需要知道什么吗?
我已经尝试将类型改进放在vt
. 结果类型为volatile的编译器对象。也许这就是问题的线索。
细化{ type ValueT = this.type }
生成相同的错误消息。