繁体   English   中英

如何匹配Rust中的&'static str

[英]How to match against a &'static str in Rust

我是Rust初学者,我无法解决这类问题。 我曾尝试更换&namename ,但这个错误“的格局&_不覆盖”的发生。

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

fn main() {
    let project = get_project("hi");
}

编译错误:

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

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

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

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


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

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

let user_input = read_user_input();  // type `String`
get_project(&input);

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

fn get_project<'a>(name: &'a str) { ... }

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

在您的示例中, name不需要具有static生存期。 因为您只在函数内使用name ,所以name不需要具有延长的生命周期。 查看Rust编程语言字符串章节 要将&str&'static str匹配,你不需要& ,只需变量本身就足够了。

pub fn get_project(name: &str) {
    match name {
        "hi" => println!("I found hi!"),
        _ => println!("Nothing match"),
    }
}

fn main() {
    get_project("hi");
    get_project("42");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM