str`是否实现`Borrow `?

问题描述 投票:0回答:1

[我正在看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)
}
rust borrowing
1个回答
0
投票

是,您可以轻松地在doc中查找

impl<T> Borrow<T> for T where T: ?Sized, 

这意味着对于任何类型的T,都将Borrow<T>实现为Twhere T: ?Sized表示可以动态调整T的大小。如果未添加特征“绑定”(这里有更多放松),则where T: ?Sized将不包括动态调整大小的类型,例如T或其他切片类型。

© www.soinside.com 2019 - 2024. All rights reserved.