如何正确地从用户输入的字符串(“真”或“假”)中读取布尔值 - true 或 false,并用它做一些事情?没有这种原始的方式使用len()?
fn main() {
loop {
println!("Input condition - true or false");
let mut condition = String::new();
io::stdin()
.read_line(&mut condition)
.expect("failed to read input.");
let len = calculate_length(&condition);
// println!("The length of '{}' is {}.\n", &condition, &len);
fn calculate_length(condition: &String) -> usize {
condition.len()
}
match len == 5 {
true => {
let number = 100;
println!("The value of number is: {}", &number);
}
_ => {
let number = 7;
println!("The value of number is: {}", &number);
}
};
break;
}
}
Run Code Online (Sandbox Code Playgroud)
你可能想要这样的东西:
let truth_value: bool = match condition {
"true" => true,
"t" => true,
"false" => false,
"f" => false,
... any other cases you want
_ => false // Or whatever appropriate default value or error.
}
Run Code Online (Sandbox Code Playgroud)
那么你的truth_value变量将是一个布尔值。通常,此类功能嵌入在FromStr实现中,但严格来说并非必须如此。
Rust 有FromStr许多类型的本机实现,包括bool,经常通过以下方式调用str::parse:
if condition.trim().parse().unwrap() {\n // true branch\n} else {\n // false branch\n}\nRun Code Online (Sandbox Code Playgroud)\n此实现仅匹配确切的字符串"true"和"false",因此它比用户交互更适合反序列化。特别是,在解析之前需要删除condition(using .trim()) 末尾的换行符。
此处的使用unwrap仅用于演示 \xe2\x80\x94有关 Rust 中错误处理的更多信息,请参阅《The Rust 编程语言》的错误处理章节。
当你更加熟悉 Rust 后,你可以使用 cratesdialoguer来渲染选择提示:
use dialoguer::Select;\n\nfn main() -> anyhow::Result<()> {\n let selection = Select::new().item("Choice 1").item("Choice 2").interact()?;\n\n match selection {\n 0 => eprintln!("Choice 1 was selected."),\n 1 => eprintln!("Choice 2 was selected."),\n _ => unreachable!(),\n }\n\n Ok(())\n}\nRun Code Online (Sandbox Code Playgroud)\n(用于anyhow错误处理)