A cheap reference-to-reference conversion. Used to convert a value to a
reference value within generic code.
AsRef
is very similar to, but serves a slightly different purpose than,
Borrow
.
AsRef
is to be used when wishing to convert to a reference of another
type.
Borrow
is more related to the notion of taking the reference. It is
useful when wishing to abstract over the type of reference
(&T
, &mut T
) or allow both the referenced and owned type to be treated
in the same manner.
The key difference between the two traits is the intention:
- Use
AsRef
when the goal is to simply convert into a reference
- Use
Borrow
when the goal is related to writing code that is agnostic to
the type of borrow and whether it is a reference or value
See the book for a more detailed comparison.
Note: this trait must not fail. If the conversion can fail, use a
dedicated method which returns an Option<T>
or a Result<T, E>
.
AsRef
auto-dereferences if the inner type is a reference or a mutable
reference (e.g.: foo.as_ref()
will work the same if foo
has type
&mut Foo
or &&mut Foo
)
Both String
and &str
implement 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
impl AsRef<[u8]> for str | [src] |
impl AsRef<str> for str | [src] |
impl<T> AsRef<[T]> for [T; 0] | [src] |
impl<T> AsRef<[T]> for [T; 1] | [src] |
impl<T> AsRef<[T]> for [T; 2] | [src] |
impl<T> AsRef<[T]> for [T; 3] | [src] |
impl<T> AsRef<[T]> for [T; 4] | [src] |
impl<T> AsRef<[T]> for [T; 5] | [src] |
impl<T> AsRef<[T]> for [T; 6] | [src] |
impl<T> AsRef<[T]> for [T; 7] | [src] |
impl<T> AsRef<[T]> for [T; 8] | [src] |
impl<T> AsRef<[T]> for [T; 9] | [src] |
impl<T> AsRef<[T]> for [T; 10] | [src] |
impl<T> AsRef<[T]> for [T; 11] | [src] |
impl<T> AsRef<[T]> for [T; 12] | [src] |
impl<T> AsRef<[T]> for [T; 13] | [src] |
impl<T> AsRef<[T]> for [T; 14] | [src] |
impl<T> AsRef<[T]> for [T; 15] | [src] |
impl<T> AsRef<[T]> for [T; 16] | [src] |
impl<T> AsRef<[T]> for [T; 17] | [src] |
impl<T> AsRef<[T]> for [T; 18] | [src] |
impl<T> AsRef<[T]> for [T; 19] | [src] |
impl<T> AsRef<[T]> for [T; 20] | [src] |
impl<T> AsRef<[T]> for [T; 21] | [src] |
impl<T> AsRef<[T]> for [T; 22] | [src] |
impl<T> AsRef<[T]> for [T; 23] | [src] |
impl<T> AsRef<[T]> for [T; 24] | [src] |
impl<T> AsRef<[T]> for [T; 25] | [src] |
impl<T> AsRef<[T]> for [T; 26] | [src] |
impl<T> AsRef<[T]> for [T; 27] | [src] |
impl<T> AsRef<[T]> for [T; 28] | [src] |
impl<T> AsRef<[T]> for [T; 29] | [src] |
impl<T> AsRef<[T]> for [T; 30] | [src] |
impl<T> AsRef<[T]> for [T; 31] | [src] |
impl<T> AsRef<[T]> for [T; 32] | [src] |
impl<T> AsRef<[T]> for [T] | [src] |