我是Rust初学者,我无法解决这类问题.我曾尝试更换&name用name,但是"格局的错误&_没有覆盖"的发生.
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)
字符串文字 - 比如"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,你可以给我一个字符串与所述生命周期,我能够做我的事情.这是真的.如果函数无法在任何生命周期内执行,编译器会抱怨;-)