Vector 如何将文件中的数字列表读入Vec?

Vector 如何将文件中的数字列表读入Vec?,vector,rust,file-io,enums,numbers,Vector,Rust,File Io,Enums,Numbers,我试图从一个文件(每行都有一个数字)中读入一个带有锈迹的Vec。我可以使用BufReader从文件中获取作为字符串加载的数字。但是,我似乎无法从BufReader包装的Result枚举中获取字符串的值 那么,如何从Result中提取这些值进行解析,以便它们可以使用字符串以外的其他类型填充Vec 我所尝试的: 使用for循环,我可以在其中打印值以证明它们在那里,但是当我尝试使用数字进行编译时,它会在解析时出现恐慌。append(…)行 fn从文件加载(文件路径:&str){ 让file=file:

我试图从一个文件(每行都有一个数字)中读入一个带有锈迹的
Vec
。我可以使用
BufReader
从文件中获取作为字符串加载的数字。但是,我似乎无法从
BufReader
包装的
Result
枚举中获取字符串的值

那么,如何从
Result
中提取这些值进行解析,以便它们可以使用字符串以外的其他类型填充
Vec

我所尝试的:

  • 使用
    for
    循环,我可以在其中打印值以证明它们在那里,但是当我尝试使用
    数字进行编译时,它会在解析时出现恐慌。append(…)
  • fn从文件加载(文件路径:&str){
    让file=file::open(file_path).expect(“找不到文件”);
    让reader=BufReader::new(文件);
    让数字:Vec=Vec::new();
    对于读卡器中的行。行(){
    //印刷品很好
    println!(“行:{:?}”,行);
    append(line.unwrap().parse::());
    }
    }
    
  • 或者,我尝试了映射,但在尝试填充
    Vec
    时遇到了相同的问题
  • fn从文件加载(文件路径:&str){
    让file=file::open(file_path).expect(“找不到文件”);
    让reader=BufReader::new(文件);
    let编号:Vec=读卡器
    .行()
    .map(| line | line.unwrap().parse::().collect());
    }
    

    这不仅仅是通过
    Result
    enum上的
    unwrap()
    方法来解决的。您可以调用
    Result
    枚举中的
    unwrap()。固定示例:

    使用std::fs::File;
    使用std::io::BufReader;
    使用std::io::BufRead;
    fn从\u文件加载\u(文件路径:&str){
    让file=file::open(file_path).expect(“找不到文件”);
    让reader=BufReader::new(文件);
    let编号:Vec=读卡器
    .行()
    .map(| line | line.unwrap().parse::().unwrap())
    .收集();
    }
    

    这是否回答了您的问题?这是一个信息丰富的问题,但无助于解决我的问题或讨论结果,BufReader,etcIt通常会讨论错误处理,它主要使用
    Result
    s。它涉及传播错误的
    .unwrap()
    运算符(表示
    确定
    /
    错误
    匹配的缩写)和其他转换函数。你是对的,它没有直接回答你,但我希望它能为你提供将来处理错误所必需的工具
    .unwrap()
    是一个直截了当的工具,并不总是最好的选择。@kmdreko感谢您的解释,这是一个非常有用的问题/答案。对于那些新生锈的人来说,很难从这些信息中提取出解决此类问题所需的信息。这就是为什么我认为这两个问题都很有价值,而且距离不够近,不足以复制或在其他地方得到回答。我确实看到了它们之间的密切关系,所以你必须展开这条线来解析它,然后在地图内部再次展开以收集值?你介意再解释一下为什么你要打开两次吗?Thanks@CoderLee
    .lines()
    可在任何缓冲读取器上工作,这意味着单个行可能因IO原因而失败。将字符串解析为i64也可能失败。由于它们都容易出错,因此都返回必须处理的
    结果
    s(在本例中通过
    .unwrap()