Trait core::convert::AsRef 1.0.0[−][src]
Expand description
用于执行廉价的引用到引用转换。
一个类似于 AsMut
的 trait,用于在可变引用之间进行转换。
如果您需要进行代价高昂的转换,最好用 &T
类型实现 From
,或者编写一个自定义函数。
AsRef
与 Borrow
具有相同的签名,但 Borrow
在几个方面有所不同:
- 与
AsRef
不同,Borrow
对任何T
都有一个毯子暗示,可用于接受引用或值。 Borrow
还要求借用值的Hash
、Eq
和Ord
与拥有的值相等。 因此,如果只想借用一个结构体的单个字段,则可以实现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