我想写一个可以直接采用字符串切片的特性:
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有什么特别之处吗?
答案 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>
。