我在看Rust中的Borrow<Borrowed>特征,我理解我们想要一个泛型函数来允许参数K或它借用的形式Q,这样K: Borrow<Q>。如果我查看一下String实现,我会发现它实现了Borrow<str>,这解释了为什么在下面的代码片段中传递&String是有效的。我想知道的是传递一个&str是如何工作的:这是否意味着str实现了... Borrow<str>?如果不是,str如何满足给定P通用的特性?
use std::borrow::Borrow;
use std::fmt::Display;
fn main() {
let foo = String::from("I'm a String");
print(&foo);
print("I'm a str");
}
fn print<P>(arg: &P)
where
P: Borrow<str> + ?Sized + Display
{
println!("{}", arg)
}发布于 2020-03-14 16:05:10
是的,您可以很容易地在doc中查找
impl<T> Borrow<T> for T where T: ?Sized, 这意味着对于任何类型的T,Borrow<T>都是为T实现的。where T: ?Sized意味着可以动态调整T的大小。如果没有添加特征“绑定”(这里更多的是放松) where T: ?Sized,那么T将不会包括像str或其他切片类型这样的动态大小类型。
https://stackoverflow.com/questions/60677385
复制相似问题