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、という形になっている。