【发布时间】:2020-12-02 00:19:31
【问题描述】:
我正在尝试使用 Rust 将文件中的数字列表(每行都有一个数字)读入Vec<i64>。我可以使用BufReader 从文件中获取作为字符串加载的数字。但是,我似乎无法从 Result 枚举中获取字符串的值,它们由 BufReader 包裹。
那么如何从Result 中获取这些值进行解析,以便他们可以使用字符串以外的其他类型填充Vec?
我尝试过的:
- 使用
for循环,我可以打印值以证明它们在那里,但是当我尝试使用numbers.append(...)行编译时,它会在解析时出现恐慌。
fn load_from_file(file_path: &str) {
let file = File::open(file_path).expect("file wasn't found.");
let reader = BufReader::new(file);
let numbers: Vec<i64> = Vec::new();
for line in reader.lines() {
// prints just fine
println!("line: {:?}", line);
numbers.append(line.unwrap().parse::<i64>());
}
}
- 另外,我尝试了映射,但在将值放入我尝试填充的
Vec<i64>时遇到了同样的问题。
fn load_from_file(file_path: &str) {
let file = File::open(file_path).expect("file wasn't found.");
let reader = BufReader::new(file);
let numbers: Vec<i64> = reader
.lines()
.map(|line| line.unwrap().parse::<i64>().collect());
}
这不是How to do error handling in Rust and what are the common pitfalls?单独解决的
【问题讨论】:
-
这是一个内容丰富的问题,但无助于解决我的问题或讨论 Result、BufReader 等
-
它概括了错误处理,主要使用
Results。它涵盖了.unwrap()、用于传播错误的?运算符(Ok/Err匹配的简写)和其他转换函数。没错,它没有直接回答您,但我希望它为您提供了将来处理错误所需的工具。.unwrap()是一个生硬的工具,并不总是最好的选择。 -
@kmdreko 感谢您的解释,这是一个非常有帮助的问题/答案。对于那些刚接触 Rust 的人来说,很难从这些信息中提取出解决此类问题所需的信息。这就是为什么我认为这两个问题都很有价值,而且还不够接近,无法重复或在其他地方回答。不过,我确实看到了它们之间的密切关系。
标签: vector rust file-io enums numbers