я столкнулся с вопросом, где у меня есть эта черта (некоторые вещи опущенные):Какой общий параметр должен быть указан?
use rand::Rng;
pub trait GeneticAlgorithm<R, Ins, C> : Clone where R: Rng {
fn call<F>(&self, program: F) where F: FnOnce(&C);
}
Эта структура реализует особенность:
pub struct Mep<Ins> {
instructions: Vec<Ins>,
unit_mutate_size: usize,
crossover_points: usize,
}
impl<R, Ins> GeneticAlgorithm<R, Ins, Vec<Ins>> for Mep<Ins> where R: Rng, Ins: Clone {
fn call<F>(&self, program: F) where F: FnOnce(&Vec<Ins>) {
program(&self.instructions);
}
}
В тесте я пытаюсь запустить это:
let mut rng = Isaac64Rng::from_seed(&[1, 2, 3, 4]);
let (a, b) = {
let mut clos = || Mep::new(3, 3, rng.gen_iter::<u32>().map(|x| x % 10).take(10));
(clos(), clos())
};
let mut c = Mep::mate((&a, &b), &mut rng);
c.call(|x: &Vec<u32>| panic!());
Rust утверждает, что он не может вызывать тип где-то, но я не уверен, как указать тип закрытия, если это проблема, и я не могу определить, какой h специфический общий параметр вызывает проблему:
error: unable to infer enough type information about `_`; type annotations or generic parameter binding required [E0282]
c.call(|x: &Vec<u32>| panic!());
Какой общий параметр необходимо указать?
Если кто-то хотел бы построить код сам, я hosting it on GitHub.