首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`str`实现`Borrow<str>`了吗?

`str`实现`Borrow<str>`了吗?
EN

Stack Overflow用户
提问于 2020-03-14 05:23:57
回答 1查看 127关注 0票数 1

我在看Rust中的Borrow<Borrowed>特征,我理解我们想要一个泛型函数来允许参数K或它借用的形式Q,这样K: Borrow<Q>。如果我查看一下String实现,我会发现它实现了Borrow<str>,这解释了为什么在下面的代码片段中传递&String是有效的。我想知道的是传递一个&str是如何工作的:这是否意味着str实现了... Borrow<str>?如果不是,str如何满足给定P通用的特性?

代码语言:javascript
复制
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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-14 16:05:10

是的,您可以很容易地在doc中查找

代码语言:javascript
复制
impl<T> Borrow<T> for T where T: ?Sized, 

这意味着对于任何类型的TBorrow<T>都是为T实现的。where T: ?Sized意味着可以动态调整T的大小。如果没有添加特征“绑定”(这里更多的是放松) where T: ?Sized,那么T将不会包括像str或其他切片类型这样的动态大小类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60677385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档