匹配一个字符串
Matching a string
我有这个
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!"),
^~~~~~
有人可以帮助我更好地理解这一点吗?这样做的更好方法是什么?
如 Strings section of the Rust Book 所述,Rust 中有两种字符串。简短版本:有些字符串 拥有 其内容 (String
),有些字符串不拥有 (&str
).
first_args
是 String
,但字符串文字是 &str
(如错误所述)。为此,您需要将 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
)可以 "decay" 借用对其内容的引用。 *
用于将容器 "dereference" 放入其内容中( 即 *first_args
采用 String
并提供对底层 str
),而 &
重新借用该值,将其变回常规引用。
我有这个
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!"),
^~~~~~
有人可以帮助我更好地理解这一点吗?这样做的更好方法是什么?
如 Strings section of the Rust Book 所述,Rust 中有两种字符串。简短版本:有些字符串 拥有 其内容 (String
),有些字符串不拥有 (&str
).
first_args
是 String
,但字符串文字是 &str
(如错误所述)。为此,您需要将 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
)可以 "decay" 借用对其内容的引用。 *
用于将容器 "dereference" 放入其内容中( 即 *first_args
采用 String
并提供对底层 str
),而 &
重新借用该值,将其变回常规引用。