在学习Rust的练习中,我正在尝试一个接受你的名字的简单程序,然后打印你的名字,如果它是有效的.
只有"Alice"和"Bob"是有效名称.
use std::io;
fn main() {
println!("What's your name?");
let mut name = String::new();
io::stdin().read_line(&mut name)
.ok()
.expect("Failed to read line");
greet(&name);
}
fn greet(name: &str) {
match name {
"Alice" => println!("Your name is Alice"),
"Bob" => println!("Your name is Bob"),
_ => println!("Invalid name: {}", name),
}
}
Run Code Online (Sandbox Code Playgroud)
当我cargo run
这个main.rs
文件,我得到:
What's your name?
Alice
Invalid name: Alice
Run Code Online (Sandbox Code Playgroud)
现在,我的猜测是,因为"爱丽丝"属于类型&'static str
且name
属于类型&str
,可能它没有正确匹配...
我打赌它不是由类型不匹配引起的.我打赌我有一些看不见的字符(在这种情况下换行).要实现您的目标,您应该修剪输入字符串:
match name.trim() {
"Alice" => println!("Your name is Alice"),
"Bob" => println!("Your name is Bob"),
_ => println!("Invalid name: {}", name),
}
Run Code Online (Sandbox Code Playgroud)