Jer*_*oen 153 string match rust
我正在试图弄清楚如何匹配String
Rust.
我最初尝试过像这样的匹配,但我发现Rust不能暗中强制转换std::string::String
为&str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
}
}
Run Code Online (Sandbox Code Playgroud)
这有错误:
error[E0308]: mismatched types
--> src/main.rs:4:9
|
4 | "a" => println!("0"),
| ^^^ expected struct `std::string::String`, found reference
|
= note: expected type `std::string::String`
found type `&'static str`
Run Code Online (Sandbox Code Playgroud)
然后我尝试构造新String
对象,因为我找不到将a String
转换为a的函数&str
.
fn main() {
let stringthing = String::from("c");
match stringthing {
String::from("a") => println!("0"),
String::from("b") => println!("1"),
String::from("c") => println!("2"),
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我3次以下错误:
error[E0164]: `String::from` does not name a tuple variant or a tuple struct
--> src/main.rs:4:9
|
4 | String::from("a") => return 0,
| ^^^^^^^^^^^^^^^^^ not a tuple variant or struct
Run Code Online (Sandbox Code Playgroud)
如何String
在Rust中实际匹配s?
Tij*_*aas 168
as_slice
不推荐使用,您现在应该使用特征std::convert::AsRef
:
match stringthing.as_ref() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Run Code Online (Sandbox Code Playgroud)
请注意,您还必须显式处理catch-all案例.
小智 25
你可以这样做:
match &stringthing[..] {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Run Code Online (Sandbox Code Playgroud)
as_str
Rust 1.7.0 还有一个方法:
match stringthing.as_str() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ari 15
你也可以这样做
match &stringthing as &str {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Run Code Online (Sandbox Code Playgroud)
看到:
A.B*_*.B. 10
编者注:这个答案适用于1.0之前的Rust版本,并且在Rust 1.0中不起作用
您可以匹配字符串切片.
match stringthing.as_slice() {
"a" => println!("0"),
"b" => println!("1"),
"c" => println!("2"),
_ => println!("something else!"),
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48164 次 |
最近记录: |