如何 return 来自函数 Vec 的单个元素?

How to return a single element from a Vec from a function?

我是 Rust 的新手,我正在尝试创建一个界面,用户可以在其中通过从可用文件列表中键入文件名来选择文件。

这个函数应该return对应于所选文件的DirEntry

fn ask_user_to_pick_file(available_files: Vec<DirEntry>) -> DirEntry {
  println!("Which month would you like to sum?");
  print_file_names(&available_files);
  let input = read_line_from_stdin();

  let chosen = available_files.iter()
      .find(|dir_entry| dir_entry.file_name().into_string().unwrap() == input )
      .expect("didnt match any files");

  return chosen
}

不过,chosen好像是借来的?我收到以下错误:

35 |     return chosen
   |            ^^^^^^ expected struct `DirEntry`, found `&DirEntry`

有什么办法可以“取消借用”它吗?或者我是否必须为 DirEntry 实施 Copy 特征?

如果这很重要我不关心这个方法之后的Vec,所以如果“取消借用”chosen破坏了Vec,那我没问题(只要编译器同意)。

使用 into_iter() 而不是 iter() 这样您就可以从迭代器中获得拥有的值而不是引用。更改后代码将按预期编译和工作:

fn ask_user_to_pick_file(available_files: Vec<DirEntry>) -> DirEntry {
    println!("Which month would you like to sum?");
    print_file_names(&available_files);
    let input = read_line_from_stdin();

    let chosen = available_files
        .into_iter() // changed from iter() to into_iter() here
        .find(|dir_entry| dir_entry.file_name().into_string().unwrap() == input)
        .expect("didnt match any files");

    chosen
}