我有这个精确的对象和函数定义:
pub struct Mep<Ins> {
instructions: Vec<Ins>,
}
impl<Ins> Mep<Ins> {
pub fn crossover<F>(parent0: &Mep<Ins>, parent1: &Mep<Ins>, mut random_point_generator: F) -> Mep<Ins>
where F: FnMut(usize) -> usize, Ins: Clone {/*Body omitted*/}
}
该函数编译正常,但是在调用它时,即使对于空函数定义,我也会收到相同的错误:
tests/mep.rs:14:33: 14:34 error: expected type, found `|`
tests/mep.rs:14 let c: Mep::crossover(a, b, |x| rng.next_u32() % x);
我也尝试了不同的参数:
pub fn crossover<F>(parent0: &Mep<Ins>, parent1: &Mep<Ins>, points: usize, mut random_point_generator: F) -> Mep<Ins>
where F: FnMut(usize) -> usize, Ins: Clone {}
导致同样的错误:
tests/mep.rs:14:33: 14:34 error: expected type, found `3`
tests/mep.rs:14 let c: Mep::crossover(a, b, 3, |x| rng.next_u32() % x);
我对生锈相当新,我在网上看到的每个地方都讨论了人们有明显遗传问题的问题,但据我所知,它们并不与我的案例分享。如何调用此函数需要做什么?
答案 0 :(得分:6)
生锈中的变量赋值使用等号而不是冒号。所以你的陈述应该是
let c = Mep::crossover(a, b, 3, |x| rng.next_u32() % x);
如果你还要指定一个类型,你需要带有以下类型的冒号和后面带有表达式的等号:
let c: Mep<Ins> = Mep::crossover(a, b, 3, |x| rng.next_u32() % x);