1

コードは次のとおりです。

extern crate tempdir;

use std::env;
use tempdir::*;

#[test]
fn it_installs_component() {
    let current_dir = env::current_dir().unwrap();
    let home_dir = env::home_dir().unwrap();
    let tmp_dir = env::temp_dir();

    println!("The current directory is: {}", current_dir.display());
    println!("The home directory is: {}", home_dir.display());
    println!("The temporary directory is: {}", tmp_dir.display());

    let stage_dir = TempDir::new_in(tmp_dir.as_path(), "Components-Test");

    let components_dir = TempDir::new_in(stage_dir.unwrap().path(), "Components");

    // This is "offending line"
    // let components_make_dir = TempDir::new_in(stage_dir.unwrap().path(), "Components.make");

    println!("---- {:?}", components_dir.unwrap().path());
    //println!("---- {:?}", components_make_dir.unwrap().path());
}

問題のある行がコメントアウトされている場合、コードは正常にコンパイルされます。コメントを外すと、エラーが発生し始めます。

error[E0382]: use of moved value: `stage_dir`
  --> src/main.rs:21:51
   |
18 |         let components_dir = TempDir::new_in(stage_dir.unwrap().path(), "Components");
   |                                              --------- value moved here
...
21 |         let components_make_dir = TempDir::new_in(stage_dir.unwrap().path(), "Components.make");
   |                                                   ^^^^^^^^^ value used here after move
   |
   = note: move occurs because `stage_dir` has type `std::result::Result<tempdir::TempDir, std::io::Error>`, which does not implement the `Copy` trait

問題は、初めて使用するときに移動することだと理解していますが、テストで両方にアクセスする必要があるため、これら 2 つのサブフォルダー間stage_dirで共有する方法がわかりません。stage_dir

私は遊んでみました&stage_dirが、それは私にはさらに不明瞭ないくつかの警告を生成しました.

4

1 に答える 1

5

TempDir::newを返しますResult<TempDir>TempDir一度開封して を取得し、それを共有するのではなく、毎回開封しようとしています。

だから変える

let stage_dir = TempDir::new_in(tmp_dir.as_path(), "Components-Test");

let stage_dir = TempDir::new_in(tmp_dir.as_path(), "Components-Test").unwrap();

代わりは。

于 2015-12-30T15:57:57.277 に答える