クロージャーを使用しないと、これをコンパイルできません。apply
そもそも正しい種類のクロージャーを返す関数を取得しようとしています。
#![feature(conservative_impl_trait)]
#![allow(dead_code)]
fn accumulate<'a>(tuples: &[(&'a str, &Fn(i32) -> bool)], i: i32) {
// this works
let _ = tuples.iter().filter(|t| apply(second, i)(t));
// this doesn't
//let f = apply(second, i);
//let _ = tuples.iter().filter(f);
//this works as well
let f = |t: &&(_,_)| apply(second, i)(t);
let _ = tuples.iter().filter(f);
}
fn apply<A, B, C, F, G>(mut f: F, a: A) -> impl FnMut(B) -> C
where F: FnMut(B) -> G,
G: FnMut(A) -> C,
A: Clone
{
move |b| f(b)(a.clone())
}
fn second<A, B: ?Sized>(&(_, ref second): &(A, B)) -> &B {
second
}
fn main() {}
apply
自分のやりたいように仕事をするにはどうすればよいですか?