Scala结构类型和存在类型问题

che*_*hry 6 scala

我的问题是,在下面的代码片段中,c2可以通过编译,但t2失败.为什么?

  type PairT[A, B] = { //structural type
    type T1 = A
    type T2 = B
  }
  class PairC[A, B] {
    type T1 = A
    type T2 = B
  }
case class TMap[A, B](a: A, b: B)
type MapC2[A] = TMap[p.T1, p.T2] forSome { val p: PairC[A, A] }
type MapT2[A] = TMap[p.T1, p.T2] forSome { val p: PairT[A, A] }
  val c2: MapC2[Int] = TMap(1,2)
  val t2: MapT2[Int] = TMap(1,2)
Run Code Online (Sandbox Code Playgroud)

lah*_*her 0

我认为这是关于构造的推理错误(或者可能是限制)type

编辑:错误消息是让我认为这是一个错误的第一件事:

“类型不匹配;发现:需要 Int(1):A”

如果将最后一行分成 2 行,即

val t3 = TMap(1,2)
val t2: MapT2[Int] = t3
Run Code Online (Sandbox Code Playgroud)

,然后它会生成一条类似的短消息:

“类型不匹配;发现:Test1.this.TMap[Int,Int] 需要:Test1.this.MapT2[Int](扩展为)Test1.this.TMap[A,A]”

鉴于 A 是一个“符号”而 Int 是一个类,看起来像是在比较苹果和橙子。抱歉,我不能再继续这个逻辑了!