1
조금 혼란 스럽네요. Option::map()
입니다. documentation은 FnOnce
을 허용한다고 말합니다.Option :: map (FnOnce)이 FnOnce를 수락하지 않는 것 같습니다 ...?
그렇다면 a
과 b
은 왜 컴파일 오류가 발생합니까?
let mut v = 3;
let mut a: &FnOnce(u32) -> u32 = &|x: u32| { v = x; x };
let mut b: &FnMut(u32) -> u32 = &|x: u32| { x };
let mut c: &Fn(u32) -> u32 = &|x: u32| { x };
let o = Option::Some(3);
o.map(a); // trait bound `std::ops::FnOnce(u32) -> u32: std::ops::Fn<(u32,)>` is not satisfied
o.map(b); // trait bound `std::ops::FnMut(u32) -> u32: std::ops::Fn<(u32,)>` is not satisfied
o.map(c); // works
는 a
및 b
등 그들 모두는 this post에 따라 FnOnce
구현하지 않나요?