我正在尝试使用一个简单的程序来测试我的 Rust 技能,该程序从单行输入中读取多个整数。它编译正确,但不幸的是当它收到输入时1 2 3
,它会出现恐慌,说输入不是有效的整数。有人可以解释一下原因,并解释一下如何修复我的程序吗?
use std::io;
fn main() {
let mut string = String::new();
io::stdin().read_line(&mut string);
let int_vec: Vec<u32> = string.split(" ")
.map(|x| x.parse::<u32>().expect("Not an integer!"))
.collect();
for i in (0..int_vec.len()).rev() {
print!("{} ", int_vec[i]);
}
}
除了 Dogberts 的答案之外......了解您将来如何使用迭代器自己调试此类问题可能会有所帮助。
The Iterator
特质暴露了inspect
您可以使用它来检查每个项目的功能。将您的代码转换为使用inspect
每张地图之前和之后都会产生:
let int_vec: Vec<u32> = string.split(" ")
.inspect(|x| println!("About to parse: {:?}", x))
.map(|x| {
x.parse::<u32>()
.expect("Not an integer!")
})
.inspect(|x| println!("Parsed {:?} successfully!", x))
.collect();
Outputs:
1 2 3
About to parse: "1"
Parsed 1 successfully!
About to parse: "2"
Parsed 2 successfully!
About to parse: "3\n"
thread '<main>' panicked at 'Not an integer!...
注意当它到达数字 3 时它试图解析什么。
当然,你可以检查一下string
一切都靠它自己。inspect
当涉及迭代器时,它很方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)