fn the_function<'a>(v1: &'a Vec<i32>, v2: &'a Vec<i32>) -> std::iter::Filter<std::iter::Chain<std::slice::Iter<'a, i32>, std::slice::Iter<'a, i32>>, fn(&&i32) -> bool> { fn only_multiples_3(x: &&i32) -> bool { *x % 3 == 0 }; v1.iter().chain(v2.iter()).filter(only_multiples_3) } ちなみに今私はこの関数をコンパイル通すために1時間かけました。 まさかの関数本体より長い戻り値型。 どうしてこうなった。 なぜなら、関数の戻り型の所には「型」を書かなければいけないのです。 Iterator<i32>はあくまでも trait