我是Rust(1.31)的新手,我想了解一段不可编译的简单代码:
fn main() {
s = String::from("foo");
match s {
"foo" => {
println!("Yes");
}
_ => {
println!("No");
}
}
}
相关错误为:
10 | "foo" => {
| ^^^^^ expected struct `std::string::String`, found reference
在这个错误之后,我决定将代码更改为:
fn main() {
let s = String::from("foo");
match s {
String::from("foo") => {
println!("Yes");
}
_ => {
println!("No");
}
}
}
通过这样做,我希望得到正确的类型,但事实并非如此:
10 | String::from("foo") => {
| ^^^^^^^^^^^^^^^^^^^ not a tuple variant or struct
我对来自编译器的这条消息感到非常困惑,最后我实现了:
fn main() {
let s = String::from("foo");
match &s as &str {
"foo" => {
println!("Yes");
}
_ => {
println!("No");
}
}
}
然而,我不理解使这个解决方案成为正确解决方案的潜在机制,以及为什么我的第二个示例不起作用.