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