4

簡単な例を次に示します。

trait Proposition[T] {
  type Repr = T
}

trait Scope {

  type OUT

  type Consequent = Proposition[_ <: OUT]

  abstract class Proof[-I, +P <: Consequent] {
    final def instanceFor(v: I): P#Repr = ???
    final def apply(v: I): P#Repr = instanceFor(v)
  }
}

これにより、コンパイルエラーが発生します。


[Error] ....scala:44: type mismatch;
 found   : _$1(in type Consequent)
 required: (some other)_$1(in type Consequent)

これはどこ(some other)から来たのですか?型選択の明確なルール (理論的には scala 3 で解決されるはず) によって引き起こされるコンパイラのバグですか?

更新 1申し訳ありませんP#Reprが、 を型選択と呼ぶべきではないことに気付きました。これはval p: P;p.Repr、 のみを参照する必要があります。

  • この文法の名前も知らないけど、ずっと使い続けてきた

  • DOT計算でも定義されていません。だからscala 3のサポートは疑わしい

4

1 に答える 1