2016-09-08 7 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

참고로 'for <'r>'항목은 상위 순위 수명 기간 바인딩이라고합니다. Google 이름으로 쉽게 사용할 수있는 구문 목록이 [https://doc.rust-lang.org/book/syntax-index.html] 있습니다. – mcarton

답변

1

언제나 그렇듯이 질문을 게시 한 지 5 분이 지났습니다.

visit_dirs() 함수는 특성 개체! 따라서 클로저 앞에 &을 삽입하면 불일치가 해결됩니다.