2016-09-08 21 views
0

私はラストに学習曲線があることを知っていますが、すぐにそれほど大きなヒットを期待しませんでした。私はこの型の不一致をかなり長い間把握しようとしており、何も進展していません。タイプがクロージャーと一致しない

struct FileInfo<'a> { 
    path: &'a Path 
} 

fn process_file(entry: &DirEntry, map: &HashMap<&str, &FileInfo>) { 
    let pathbuf = entry.path(); 
    let mut f = fs::File::open(pathbuf.as_path()).unwrap(); 
    let info = FileInfo { path: pathbuf.as_path() }; 
} 

fn visit_dirs(dir: &Path, cb: &Fn(&DirEntry) ->()) -> io::Result<()> { 
    // Taken from Rust read_dir docs 
    // ... 
} 

fn main() { 
    let path = Path::new("/Users/gmadrid/Media/"); 
    let map : HashMap<&str, &FileInfo> = HashMap::new(); 

    visit_dirs(path, |e: &DirEntry| process_file(e, &map)).unwrap(); 
} 

私の閉鎖にvisit_dirs barfsを呼び出して:

src/main.rs:51:19: 51:55 error: mismatched types [E0308] 
src/main.rs:51 visit_dirs(path, |e: &DirEntry| process_file(e, &map)).unwrap(); 
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
src/main.rs:51:19: 51:55 help: run `rustc --explain E0308` to see a detailed explanation 
src/main.rs:51:19: 51:55 note: expected type `&for<'r> std::ops::Fn(&'r std::fs::DirEntry)` 
src/main.rs:51:19: 51:55 note: found type `[[email protected]/main.rs:51:19: 51:55 map:_]` 
error: aborting due to previous error 

for<'r>ものは何ですか?なぜこのタイプの不一致が起こっているのでしょうか。それは私には大丈夫ですが、もちろん、私は何を探しているのか分かりません。 :-)

+2

FYIでは、 'のための' <'r> 'は上位ランクの生涯の境界と呼ばれます。 Googleの名前には簡単な構文の[リスト(https://doc.rust-lang.org/book/syntax-index.html)]があります。 – mcarton

答えて

1

いつものように、質問に投稿してから5分後に答えが見つかります。

関数は、特性オブジェクトを取ります。だから、&をクロージャの前に置くと、私の不一致が修正されます。

関連する問題