Rust:为什么不使用 &str 的 Into<String>?

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

考虑这个陈述:

From<T> for U
意味着
Into<U> for T
来源

let t="abc";
并注意
t
的类型为
&str

大家都用过:

let s=String::from(t);

这样我们就有:

From<&str> for String

根据上面的蕴涵我们有:

Into<String> for &str

但是,以下方法不起作用:

fn main(){
    let z="abc";
    let x = String::from(z);
    let s=&str::into(x);
}

我不明白什么?

rust traits
2个回答
1
投票

它有效,只不过

&str::into(z)
被理解为
&(str::into(z))
。如果要调用类型
into
的关联函数
&str
,则必须使用该类型的限定名称:

fn main(){
    let z="abc";
    let x = String::from(z);
    let s: String = <&str>::into(x);
}

请注意,添加了类型注释

String
,否则 Rust 无法知道哪种类型是
into
的目标。

否则,你也可以使用方法语法

    let s: String = x.into();

或特质

Into
的相关功能:

    let s: String = Into::into(x);

0
投票

你在那里转了一会儿。整个往返过程中,我经常遇到这种情况;)

让我们考虑一下类型。

x
String
。所以
into(x)
会尝试将
String
变成
&str
,但你不能这样做。

事实上,

String
实现了
From<&str>
,意味着
&str
实现了
Into<String>
,也就是说,你可以将
&str
变成
String

这就是您真正想要的:

fn main() {
    let x: &str = "abc";
    let z: String = String::from(x);
    
    let s: String = x.into();
}

没问题!

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