AsRefとAsMutの使い方メモ
AsRefとAsMut
「ある型がAsRef<T>を実装しているなら、as_ref()でその型から&Tを借用できる」というトレイト。
AsMutも同様に「ある型がAsMut<T>を実装しているなら、その型からas_mut()で&mut Tを借用できる」というトレイト。
AsRefの定義
pub trait AsRef<T: ?Sized> { fn as_ref(&self) -> &T;}AsMutの定義
pub trait AsMut<T: ?Sized> { fn as_mut(&mut self) -> &mut T;}こんなところで使われる
std::fs::File::openメソッドはAsRef<Path>を引数に取る。
fn open<P: AsRef<Path>>(path: P) -> Result<File>本来は&Pathでいいんだけど、AsRef<Path>を引数に取ることで&Pathを借用できる型ならなんでもOK、という形になっている。