我是Rust初学者,我无法解决这类问题。我尝试将&name
替换为name
,但错误“模式&_
未涵盖”。
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`
答案 0 :(得分:6)
字符串文字 - 如"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
,你可以给我一个字符串表示生命周期,我能够做我的事情。这是真的。如果函数不能在任何生命周期内完成,编译器会抱怨; - )
答案 1 :(得分:3)
在您的示例中,name
不需要static
生命周期。由于您只在函数中使用name
,因此name
不需要延长使用寿命。查看 The Rust Programming Language 的strings chapter。要将&str
与您不需要&'static str
的{{1}}相匹配,只需变量本身即可。
&