AsRef<T>に対する解釈

AsRefトレイトがよくわかない。。。

よくわかならいなりに自分が解釈したものを書く

結論

AsRef<T>トレイトを実装してるものは.as_ref()することで&Tと見做して処理することができるよ

ということをコンパイラに教えるアノテーション的な意味が強いというふうに解釈した。

なぜas_ref()の戻り値が&T(参照)である必要があるのか

自分の解釈: 複数種類の型に対して共通の処理をさせるため。

一度参照にしてあげることで、元来の型を隠すことができる。

あえて型を隠し、ジェネリクスTで自分の好きな型に見せかけることで複数の型に対して共通の処理を行わせること(= コンパイルを通すこと)ができる。

ファイル操作ではトレイト境界にAsRef<Path>を用いる。

ファイルパスの型はstr, String, OsStrなどの複数の型を利用できるようになっている。

AsRef<Path>を使うことで内部ではstr, String, OsStrという型を一度隠し、Pathというラベルに張り替えてコンパイラを騙して処理させることができる。

という具合だ。