Rust笔记 - Borrow and BorrowMut trait

933 阅读1分钟

在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());
}