1
従属型_ >: a.type
に関連する型エイリアスを作成しようとしました。Scalaコンパイラが型パラメータのスーパータイプとしてワイルドカード型の宣言を禁止する理由
Scalaのコンパイラは、私は理解していなかったエラーを報告します。
scala> def foo[A](a: A) = {
| type F = Function1[_ >: a.type, Unit]
| }
<console>:12: error: type mismatch;
found : a.type (with underlying type A)
required: AnyRef
Note that A is unbounded, which means AnyRef is not a known parent.
Such types can participate in value classes, but instances
cannot appear in singleton types or in reference comparisons.
type F = Function1[_ >: a.type, Unit]
^
私はa: A with AnyRef
にa: A
を交換した場合、それは動作します:
scala> def foo[A](a: A with AnyRef) = {
| type F = Function1[_ >: a.type, Unit]
| }
foo: [A](a: A with AnyRef)Unit
なぜ? 制限の目的は何ですか?
なぜそれが_>:a.typeに影響するのかまだ分かりません。私は_>のような実在の型を考えました:a.typeは型の等価チェックには関係しません。 –
私は、セーフガードが適用されたときにコンテキストが考慮されないと仮定します。 Scalaの言語学者の一人が明確になることを願っています。 – devkat