匹配一个字符串

时间:2015-01-10 00:47:49

标签: string pattern-matching rust

我有这个

fn main() {
    let args = os::args();
    let first_args = args[1].to_string();
    match first_args {
        "test" => println!("Good!"),
        _      => println!("No test ?!"),
    }
}

但在编译期间,我收到此错误:

error: mismatched types: expected `collections::string::String`, found `&'static str` (expected struct collections::string::String, found &-ptr)
src/command_line_arguments.rs:7         "test" => println!("Good!"),
                                        ^~~~~~

有人可以帮助我更好地理解这一点吗?什么是更好的方法呢?

1 个答案:

答案 0 :(得分:7)

Rust中有两种字符串,如Strings section of the Rust Book所述。简短版本:拥有其内容的字符串(String)和不符合&str的字符串。

first_argsString,但字符串文字为&str s(由错误指出)。为此,您需要将first_args重新转换为借用的字符串,如下所示:

fn main() {
    let args = os::args();
    let first_args = args[1].to_string();
    match &*first_args {
        "test" => println!("Good!"),
        _      => println!("No test ?!"),
    }
}

简单说明&*的作用:拥有容器(如StringVec)可以“衰减”为对其内容的借用引用。 *用于将容器“取消引用”到其内容中( *first_args获取String并提供对基础str的访问权限,而&重新借用该值,将其转回常规参考。