关于期待类型的奇怪错误

时间:2015-10-30 11:56:21

标签: rust

我有这个精确的对象和函数定义:

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);

我对生锈相当新,我在网上看到的每个地方都讨论了人们有明显遗传问题的问题,但据我所知,它们并不与我的案例分享。如何调用此函数需要做什么?

1 个答案:

答案 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);