我正在试图弄清楚如何匹配StringRust.
我最初尝试过像这样的匹配,但我发现Rust不能暗中强制转换std::string::String为&str.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Run Code Online (Sandbox Code Playgroud)
这有错误:
error[E0308]: mismatched types
--> src/main.rs:4:9
|
4 | "a" => println!("0"),
| ^^^ expected struct `std::string::String`, found reference
|
= note: expected type `std::string::String`
found type `&'static str`
Run Code Online (Sandbox Code Playgroud)
然后我尝试构造新String对象,因为我找不到将a String转换为a的函数&str.
fn main() {
let stringthing = String::from("c");
match stringthing {
String::from("a") => println!("0"),
String::from("b") => …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Rust中编写一个简单的函数,它将询问用户一个期待回答"你"或"我"的问题.它应该返回一个布尔值,或者再次询问用户是否回答错误.我提出了:
fn player_starts() -> bool {
println!("Who will start (me/you)");
loop {
let input = readline::readline(">");
match input {
Some("me") => return true,
Some("you") => return false,
_ => None,
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的是:
error: mismatched types:
expected `collections::string::String`,
found `&'static str`
(expected struct `collections::string::String`,
found &-ptr) [E0308]
Run Code Online (Sandbox Code Playgroud)
有没有办法强迫文字在这里工作,还是有更好的方法来实现我的目标?
是否可以String使用静态str值匹配Rust中的结构?这是一个最小的例子:
struct SomeStruct {
a: String,
}
fn main() {
let s = SomeStruct {
a: "Test".to_string(),
};
match s {
SomeStruct { a: "Test" } => {
println!("Match");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将无法编译,因为静态str引用无法与String成员匹配.它可以在没有解构的情况下工作a,然后在匹配中添加嵌套的if语句吗?