Rustでmap関数を実装したかった
結論
納得いかん
引数の方を何でもにできなかった。
再帰関数を定義しようとすると、多重貸し出しになってコンパイルが通らなかった。
解決策を調査したい。
サンプルコード
fn map<T>(f: Box<dyn Fn(T) -> T>, a: &Vec<T>) -> Vec<T> where T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T> + std::ops::Div<Output = T> { let mut b = vec![]; for &num in a{ b.push(f(num)); } b } fn triple<T>(x: T) -> T where T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T> + std::ops::Div<Output = T> { x * x + x - x / x } fn main(){ let mut arry1 = &vec![4, 5, 3, 2]; let v1 = map(Box::new(triple),&mut arry1); println!("{:?}", v1); }