AsRef AsMut
std::convert::AsRef 和 std::convert::AsMut 用于廉价地将类型转换为引用。对于 A 和 B 类型,
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,还可以接受 OsStr,OsString,str,String 和 PathBuf 的隐式转换,因为这些类型都实现了 AsRef<Path>。