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>
。