考虑这个陈述:
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);
}
我不明白什么?
它有效,只不过
&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);
你在那里转了一会儿。整个往返过程中,我经常遇到这种情况;)
让我们考虑一下类型。
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();
}
没问题!