Skip to content

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