rust - 处理 stdin 上的 UTF-8 输入

标签 rust

the book , future 的 rustaceans 可以构建一个猜谜游戏。在这个猜谜游戏中,有以下片段:

let mut guess = String::new();
io::stdin().read_line(&mut guess)
    .expect("Failed to read line");

嗯...为什么read_line()会失败,我想。然后我发现了一个艰难的方法:我输入的不是 50,而是 (德语键盘...)并且...读取行失败。

所以我想我会尽快修复它。

match io::stdin().read_line(&mut guess) {
    Ok(str) => str,
    Err(_) => println!("Please only enter ASCII characters.");
}

返回类型不匹配:预期 (),发现 usize
啊,对了! read_line() 返回 Ok 结果中输入的字节数。但我不想对这些信息做任何事情,所以我替换了上面的 Ok 语句:

Ok(_) => {},

这有效。但这是正确的做法吗?我基本上是告诉程序在 Ok 上运行一个空代码块,我认为这在 Java、PHP、JavaScript 等语言中是不好的风格。

最佳答案

由于您只对其中一个匹配臂感兴趣,因此可以使用 if let绑定(bind):

if let Err (_) = io::stdin().read_line(&mut guess) {
    println!("Please only enter ASCII characters.");
}

关于rust - 处理 stdin 上的 UTF-8 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782683/

相关文章:

rust - 如何创建include_str的错误版本?

rust - 找不到 crate peg_syntax_ext

optimization - 我可以强制 Rust 不优化单个函数吗?

rust - 如何在不关闭警告的情况下摆脱从未使用过的警告?

iterator - 如何压缩两个以上的迭代器?

rust - 用 Hyper 显示响应体只显示响应体的大小

reflection - 在 Rust 中是否有来自 C# 的 nameof() 的模拟?

openssl - 是否可以从 Rust-openssl 中的密码生成 RSA key 对?

struct - 如何在调试输出中打印完整的结构路径?

rust - 使用 for 循环显示矩阵时类型不匹配