Trait std::convert::AsRef1.0.0[][src]

pub trait AsRef<T> where
    T: ?Sized
{ fn as_ref(&self) -> &T; }
Expand description

用于执行廉价的引用到引用转换。

trait 类似于 AsMut,用于在可变引用之间进行转换。 如果需要进行昂贵的转换,最好用 &T 类型实现 From 或编写自定义函数。

AsRef 具有与 Borrow 相同的签名,但是 Borrow 在几个方面有所不同:

  • AsRef 不同,Borrow 对任何 T 都有一个毯子暗示,可用于接受引用或值。
  • Borrow 还要求借用值的 HashEqOrd 等于拥有值的 HashEqOrd。 因此,如果只想借用一个结构体的单个字段,则可以实现 AsRef,而不能实现 Borrow

注意: 此 trait 一定不能失败。如果转换失败,请使用专用方法返回 Option<T>Result<T, E>

泛型实现

  • AsRef 如果内部类型是引用或变量引用,则自动引用 (例如: 如果 foo 具有 &mut Foo&&mut Foo 类型,则 foo.as_ref() 将工作相同)

Examples

通过使用 trait bounds,我们可以接受不同类型的参数,只要它们可以转换为指定的 T 类型即可。

例如: 通过创建一个采用 AsRef<str> 的泛型函数,我们表示我们希望接受所有可以转换为 &str 的引用作为参数。 由于 String&str 都实现了 AsRef<str>,因此我们可以将两者都用作输入参数。

fn is_hello<T: AsRef<str>>(s: T) {
   assert_eq!("hello", s.as_ref());
}

let s = "hello";
is_hello(s);

let s = "hello".to_string();
is_hello(s);
Run

Required methods

执行转换。

Implementors