簡體   English   中英

`str` 是否實現了 `Borrow<str> `?

[英]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, 

這意味着對於任何類型TBorrow<T>都是為T實現的。 where T: ?Sized表示T可以動態調整大小。 如果未添加where T: ?Sized特征“綁定”(這里更多的是放松),則T將不包括動態大小的類型,如str或其他切片類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM