【发布时间】:2015-10-11 01:09:22
【问题描述】:
在学习 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),
}
}
当我cargo run 这个main.rs 文件时,我得到:
What's your name?
Alice
Invalid name: Alice
现在,我的猜测是,因为“Alice”是&'static str 类型,而name 是&str 类型,可能匹配不正确...
【问题讨论】:
-
试试
match name.trim() { ... }。我目前无法测试它,但我敢打赌输入中有换行符。 -
就是这样...我总是忘记这一点,谢谢!如果您发布答案,我会投票并接受。
-
如果存在类型不匹配,则不会编译。您也可以使用 Debug (
{:?}) 而不是 Display ({}) 对其进行格式化,从而准确查看字符串中的内容。
标签: rust