在Rust中实现上面的trait就能够借用类型的引用。但实现该trait时会人为添加一些限制,以区别于AsRef 和 AsMut trait。该trait一般添加Hash 和 Eq trait的限制,要求对变量进行hash后得到的值要与变量borrow后hash的值要一致。下面看一下定义:
trait Borrow<Borrowed: ?Sized> {
fn borrow(&self) -> &Borrowed;
}
trait BorrowMut<Borrowed: ?Sized>: Borrow<Borrowed> {
fn borrow_mut(&mut self) -> &mut Borrowed;
}
下面看一个使用的例子:
use std::borrow::Borrow;
fn check<T: Borrow<str>>(s: T) {
assert_eq!("Hello", s.borrow());
}
fn main() {
let s = "Hello".to_string();
assert_eq!((&s as &dyn Borrow<str>).borrow(), "Hello");
check(s);
let s = "Hello";
assert_eq!("Hello", s.borrow());
}