[英]How to match against a &'static str in Rust
我是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`
字符串文字 - 比如"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.