私は "scalac -explaintypes" を実行し、のようなものが表示される場合:行は何scalac -explaintypes:「<notype><:X?」とは何ですか?平均?
Nothing <: ThingManager?
<notype> <: ThingManager?
false
true
を "> < < NOTYPE:?ThingManagerを"平均?
「タイプがThingManagerに準拠していない可能性がありますか?
私は "scalac -explaintypes" を実行し、のようなものが表示される場合:行は何scalac -explaintypes:「<notype><:X?」とは何ですか?平均?
Nothing <: ThingManager?
<notype> <: ThingManager?
false
true
を "> < < NOTYPE:?ThingManagerを"平均?
「タイプがThingManagerに準拠していない可能性がありますか?
-explain-types
すべてのサブタイプチェックを呼び出します。インデントは、再帰呼び出しを表示するために使用されます。再帰の3つのレベルがあります。
scala210 -explaintypes -e '0 : java.lang.String'
scalacmd9062993631372828655.scala:1: error: type mismatch;
found : Int(0)
required: java.lang.String
0 : java.lang.String
^
one error found
Int(0) <: java.lang.String?
Int <: java.lang.String?
<notype> <: java.lang.String?
false
false
false
:
はここで小さな例です。最初の呼び出しは、UniqueConstantType(0) <:< UniqueTypeRef(String)
かどうかをチェックしています。 LHS isは、リテラル整数のシングルトンタイプです。チェックは、そのシングルトンタイプUniqueTypeRef(Int) <:< UniqueTypeRef(String)
の基になるタイプconsideringによって続行されます。これはString
に準拠している場合
クラスString
(base type)のInt
のスーパータイプのための適合チェック次いでsearchesは、次にチェック。このようなスーパータイプがないため、NoType
が返されます。 <:<
への再帰呼び出しは、出力<notype> <: java.lang.String
につながります。
sym2.isClass && {
val base = tr1 baseType sym2 // UniqueTypeRef(Int) baseType String => NoType
(base ne tr1) && base <:< tr2
}
NoType
はヌルオブジェクトです。 (コンパイラはNoSymbol
、NoPosition
の場合もこのパターンを使用します)。
非常に有益な、ありがとう。 –
この出力をトリガーする小さなスニペットを含めると便利です。 – retronym