生锈 - 是真是假

Gke*_*key 6 boolean rust

如何正确地从用户输入的字符串(“真”或“假”)中读取布尔值 - 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)

Nat*_*ord 9

你可能想要这样的东西:

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实现中,但严格来说并非必须如此。

  • 这可以缩写为 `lettruth_value = matches!(condition, "true" | "t" | "1")` (11认同)
  • 感谢各位编码前辈的贡献。也许这是一个“小问题”,但很高兴收到您的答案。收到您的意见真的很有帮助。 (3认同)

L. *_* F. 8

Rust 有FromStr许多类型的本机实现,包括bool,经常通过以下方式调用str::parse

\n
if condition.trim().parse().unwrap() {\n    // true branch\n} else {\n    // false branch\n}\n
Run Code Online (Sandbox Code Playgroud)\n

此实现仅匹配确切的字符串"true""false",因此它比用户交互更适合反序列化。特别是,在解析之前需要删除condition(using .trim()) 末尾的换行符。

\n

此处的使用unwrap仅用于演示 \xe2\x80\x94有关 Rust 中错误处理的更多信息,请参阅《The Rust 编程语言》的错误处理章节。

\n
\n

当你更加熟悉 Rust 后,你可以使用 cratesdialoguer来渲染选择提示:

\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n

(用于anyhow错误处理)

\n