AsRef如何与str一起使用?

时间:2017-04-19 10:30:41

标签: rust

我想写一个可以直接采用字符串切片的特性:

use std::path::Path;

trait Trait1 {}

impl Trait1 for str {}
// impl<'a> Trait1 for &'a str {}

fn run<T: Trait1>(_: T) {}
fn run1<T: AsRef<Path>>(_: T) {}

fn main() {
    // E0277: the trait bound `&str: Trait1` is not satisfied
    // run::<&str>("sf");
    run1::<&str>("sf");
}

请注意

run::<&str>("sf");
除非Trait1也实施&str,否则

将无法编译。但是,AsRef尽管str仅适用于{{1}}。 AsRef有什么特别之处吗?

1 个答案:

答案 0 :(得分:4)

如果查看documentation for AsRef,您会看到它列出了以下实现:

impl<'a, T, U> AsRef<U> for &'a T where T: AsRef<U> + ?Sized, U: ?Sized

也就是说,str实施AsRef<Path>意味着&str 实施AsRef<Path>