我有这个
fn main() {
let args = os::args();
let first_args = args[1].to_string();
match first_args {
"test" => println!("Good!"),
_ => println!("No test ?!"),
}
}
但在编译期间,我收到此错误:
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!"),
^~~~~~
有人可以帮助我更好地理解这一点吗?什么是更好的方法呢?
答案 0 :(得分:7)
Rust中有两种字符串,如Strings section of the Rust Book所述。简短版本:拥有其内容的字符串(String
)和不符合&str
的字符串。
first_args
为String
,但字符串文字为&str
s(由错误指出)。为此,您需要将first_args
重新转换为借用的字符串,如下所示:
fn main() {
let args = os::args();
let first_args = args[1].to_string();
match &*first_args {
"test" => println!("Good!"),
_ => println!("No test ?!"),
}
}
简单说明&*
的作用:拥有容器(如String
和Vec
)可以“衰减”为对其内容的借用引用。 *
用于将容器“取消引用”到其内容中(即 *first_args
获取String
并提供对基础str
的访问权限,而&
重新借用该值,将其转回常规参考。