匹配一个字符串

Low*_*ong 1 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 ?!"),
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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!"),
                                        ^~~~~~
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我更好地理解这个吗?这会是一个更好的方法吗?

DK.*_*DK. 7

Rust中有两种字符串,正如Rust BookStrings部分所解释的那样.简短版本:有字符串拥有其内容(String),字符串不具有(&str).

first_argsString,但字符串文字是&strs(由错误指出).要做到这一点,你需要first_args转回一个借来的字符串,如下所示:

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

简单说明一下&*:拥有容器(如StringVec)可以"腐朽"为借用的内容引用. *用于将容器"取消引用"到其内容中( *first_args获取String并提供对底层的访问str),同时&重新借用该值,将其转换为常规引用.