Low*_*ong 1 string pattern-matching rust
我有这个
fn main() {
let args = os::args();
let first_args = args[1].to_string();
match first_args {
"test" => println!("Good!"),
_ => println!("No test ?!"),
}
}
Run Code Online (Sandbox Code Playgroud)
但在编译期间,我收到此错误:
error: mismatched types: expected `collections::string::String`, found `&'static str` (expected struct collections::string::String, found &-ptr)
src/command_line_arguments.rs:7 "test" => println!("Good!"),
^~~~~~
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我更好地理解这个吗?这会是一个更好的方法吗?
Rust中有两种字符串,正如Rust Book的Strings部分所解释的那样.简短版本:有字符串拥有其内容(String),字符串不具有(&str).
first_args是String,但字符串文字是&strs(由错误指出).要做到这一点,你需要first_args转回一个借来的字符串,如下所示:
fn main() {
let args = os::args();
let first_args = args[1].to_string();
match &*first_args {
"test" => println!("Good!"),
_ => println!("No test ?!"),
}
}
Run Code Online (Sandbox Code Playgroud)
简单说明一下&*:拥有容器(如String和Vec)可以"腐朽"为借用的内容引用. *用于将容器"取消引用"到其内容中(即 *first_args获取String并提供对底层的访问str),同时&重新借用该值,将其转换为常规引用.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |