AsRef AsMut

std::convert::AsRefstd::convert::AsMut 用于廉价地将类型转换为引用。对于 AB 类型,

impl AsRef<B> for A

表示 &A 可以转换为 &B

impl AsMut<B> for A

表示 &mut A 可以转换为 &mut B

这对于在不复制或移动值的情况下执行类型转换很有用。标准库中的一个例子是 std::fs::File.open()

fn open<P: AsRef<Path>>(path: P) -> Result<File>

这使得 File.open() 不仅可以接受 Path,还可以接受 OsStrOsStringstrStringPathBuf 的隐式转换,因为这些类型都实现了 AsRef<Path>