Scala 类值参数的类型成员的类型不匹配

Scala 类值参数的类型成员的类型不匹配,scala,type-members,Scala,Type Members,为什么使用绑定到类值参数的类型成员会产生“类型不匹配”错误?例如: scala> class A { type t } defined class A scala> class B(val a: A) defined class B scala> val aInt = new A { type t = Int } aInt: A{type t = Int} = $anon$1@6ccc7368 scala> val b = new B(aInt) b: B = B@

为什么使用绑定到类值参数的类型成员会产生“类型不匹配”错误?例如:

scala> class A { type t }
defined class A

scala> class B(val a: A)
defined class B

scala> val aInt = new A { type t = Int }
aInt: A{type t = Int} = $anon$1@6ccc7368

scala> val b = new B(aInt)
b: B = B@834518

scala> val i: b.a.t = 1
<console>:11: error: type mismatch;
 found   : Int(1)
 required: b.a.t
       val i: b.a.t = 1
                      ^

这种行为的原因是什么?

似乎我已经明白发生了什么。在类
B
的示例中,值
a
转换为类型
a
,该类型
t
没有确定的值。在抽象类
C
的示例中,实例
C
aInt
覆盖
a
的值,该值具有
t
的具体类型。换句话说,
c
不是
c
的实例:它是其匿名子类的实例

如果我将说明
c
类型的示例明确更改为
c
,则得到与第一种情况相同的错误:

scala> class A { type t }
defined class A

scala> val aInt = new A { type t = Int }
aInt: A{type t = Int} = $anon$1@3b8590c5

scala> abstract class C { val a: A }
defined class C

scala> val c: C = new C { val a = aInt }
c: C = $anon$1@5f14a3c6

scala> val i: c.a.t = 1
<console>:11: error: type mismatch;
 found   : Int(1)
 required: c.a.t
       val i: c.a.t = 1
                      ^
scala>class A{type t}
定义的A类
scala>val aInt=newa{type t=Int}
aInt:A{type t=Int}=$anon$1@3b8590c5
scala>抽象类C{val a:a}
定义的C类
scala>valc:c=newc{vala=aInt}
c:c=$anon$1@5f14a3c6
scala>vali:c.a.t=1
:11:错误:类型不匹配;
发现:Int(1)
必填项:c.a.t
val i:c.a.t=1
^
scala> class A { type t }
defined class A

scala> val aInt = new A { type t = Int }
aInt: A{type t = Int} = $anon$1@3b8590c5

scala> abstract class C { val a: A }
defined class C

scala> val c: C = new C { val a = aInt }
c: C = $anon$1@5f14a3c6

scala> val i: c.a.t = 1
<console>:11: error: type mismatch;
 found   : Int(1)
 required: c.a.t
       val i: c.a.t = 1
                      ^