如何匹配从标准输入读取的字符串?

时间:2015-07-21 14:07:37

标签: rust

在学习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 strname的类型为&str,可能是因为它没有正确匹配...

1 个答案:

答案 0 :(得分:7)

我敢打赌,这不是因类型不匹配造成的。我打赌我有一些看不见的字符(在这种情况下换行)。要实现您的目标,您应该修剪输入字符串:

match name.trim() {
    "Alice" => println!("Your name is Alice"),
    "Bob"   => println!("Your name is Bob"),
    _ => println!("Invalid name: {}", name),
}