在 the book , future 的 rustaceans 可以构建一个猜谜游戏。在这个猜谜游戏中,有以下片段:
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("Failed to read line");
嗯...为什么read_line()
会失败,我想。然后我发现了一个艰难的方法:我输入的不是 50
,而是 5ß
(德语键盘...)并且...读取行失败。
所以我想我会尽快修复它。
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/