pub trait AsRef<T>where
T: ?Sized,{
// Required method
fn as_ref(&self) -> &T;
}Expand description
Used to do a cheap reference-to-reference conversion.
This trait is similar to AsMut which is used for converting between mutable references.
If you need to do a costly conversion it is better to implement From with type
&T or write a custom function.
§Relation to Borrow
AsRef has the same signature as Borrow, but Borrow is different in a few aspects:
- Unlike
AsRef,Borrowhas a blanket impl for anyT, and can be used to accept either a reference or a value. (See also note onAsRef’s reflexibility below.) Borrowalso requires thatHash,EqandOrdfor a borrowed value are equivalent to those of the owned value. For this reason, if you want to borrow only a single field of a struct you can implementAsRef, but notBorrow.
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>.
§Generic Implementations
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).
Note that due to historic reasons, the above currently does not hold generally for all
dereferenceable types, e.g. foo.as_ref() will not work the same as
Box::new(foo).as_ref(). Instead, many smart pointers provide an as_ref implementation which
simply returns a reference to the pointed-to value (but do not perform a cheap
reference-to-reference conversion for that value). However, AsRef::as_ref should not be
used for the s