如何匹配Rust中的&'static str

mak*_*aku 3 rust

我是Rust初学者,我无法解决这类问题.我曾尝试更换&namename,但是"格局的错误&_没有覆盖"的发生.

fn get_project(name: &'static str) {
    match &name {
        "hi" => {},
    }
}

fn main() {
    let project = get_project("hi");
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

error[E0308]: mismatched types
 --> <anon>:3:9
  |
3 |         "hi" => {},
  |         ^^^^ expected &str, found str
  |
  = note: expected type `&&str`
  = note:    found type `&'static str`
Run Code Online (Sandbox Code Playgroud)

Luk*_*odt 6

字符串文字 - 比如"hi"- 有类型&'static str.所以如果你已经有了&str,你不需要添加&:

fn get_project(name: &str) {
    match name {
        "hi" => {},
        _ => {}, // matches have to be exhaustive 
    }
}
Run Code Online (Sandbox Code Playgroud)

我还添加了一个默认情况,因为Rust中的匹配需要详尽无遗:它们需要涵盖所有可能的情况.


也许你注意到,我也'static从参数列表中删除了它.如果你想了解一些有生命的东西,请继续.否则,请在这里停止阅读,因为它可能令人困惑,在这种情况下并不重要.

在此函数中,不需要将给定参数的生命周期限制为'static.也许你也想传入从以下地方借来的字符串切片String:

let user_input = read_user_input();  // type `String`
get_project(&input);
Run Code Online (Sandbox Code Playgroud)

上面的代码仅在'static从参数中删除时才有效.删除后,该功能相当于:

fn get_project<'a>(name: &'a str) { ... }
Run Code Online (Sandbox Code Playgroud)

这意味着该函数在一生中是通用的'a.该函数说:给定任何生命周期'a,你可以给我一个字符串与所述生命周期,我能够做我的事情.这是真的.如果函数无法在任何生命周期内执行,编译器会抱怨;-)