2

Scala リフレクション ガイドには次のように書かれています。

マニフェストと同様に、実際にはコンパイラに TypeTag を生成するように要求できます。これは、TypeTag[T] 型の暗黙の証拠パラメータを指定するだけで実行できます。暗黙的な検索中に一致する暗黙的な値が見つからない場合、コンパイラは TypeTag[T] を自動的に生成します。

このStackOverflow の回答は、「暗黙の証拠」の概念を美しく説明しています。ただし、コンパイラがTypeTag[T]を生成することが何を意味するのかは、まだ完全には明らかではありません。

  • これは、これが「暗黙の証拠」検索の特殊なケースであることを意味しますか? つまり、クラス TypeTag[T] は、コンパイラが暗黙的な検索を行うときに特別な方法で処理されますか? Scala リフレクション API で暗黙的なパラメーター値を探してみましたが、TypeTag[T] を提供するものは見つかりませんでした。そのため、TypeTag[T] の暗黙的なパラメーターはコンパイラーの内部から来ていると思います (ドキュメントにあるように)。したがって、クラス名 TypeTag[T] はコンパイラのソースにハードコードされています。この仮定は正しいですか?

  • 暗黙的な値の自動生成はどこかに文書化されていますか? 言い換えれば、自動的に生成された暗黙の証拠をすべてリストしたドキュメントがどこかにありますか? Scala 言語仕様(バージョン 2.9)に TypeTag[T] が見つかりませんでした。TypeTag[T] に最も近い概念は、自動的に生成される暗黙のパラメーターであるマニフェストです。マニフェストは、Scala 2.9 で自動的に生成される唯一の暗黙的な値パラメーターですか?

4

1 に答える 1

2

はい、TypeTags と WeakTypeTags は、暗黙的な検索によって特別に扱われます。暗黙のマクロが実際に機能するようになったので、このハードコードを削除する予定ですが、実装はまだ残っています。

これまでのところ、ソースコード以外の暗黙的な値の自動生成に関するドキュメントはありません。現在、型タグとマニフェストのみが生成されていると書かれています: tools/nsc/typechecker/Implicits.scala#L1288

于 2014-02-17T11:05:30.303 に答える