[英]Does `str` implement `Borrow<str>`?
我正在查看 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)
}
是的,您可以輕松地在文檔中查找
impl<T> Borrow<T> for T where T: ?Sized,
這意味着對於任何類型T
, Borrow<T>
都是為T
實現的。 where T: ?Sized
表示T
可以動態調整大小。 如果未添加where T: ?Sized
特征“綁定”(這里更多的是放松),則T
將不包括動態大小的類型,如str
或其他切片類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.