【发布时间】:2016-08-22 15:26:16
【问题描述】:
A 是一个包含B 向量的结构。 A 实现了add_b 方法,该方法将B 实例添加到B 的列表中。 B 包含一个闭包属性 f。
如果我在带有add_b 的向量中添加一个B,就可以了。如果我用add_b 添加两个向量,我得到一个错误,说两个闭包是不同的。这是一个最小的例子:
// A struct...
struct A<F> {
b_vec: Vec<B<F>>, // A vector of B
}
// ...and its implementation
impl<F> A<F>
where
F: Fn(),
{
fn new() -> A<F> {
A { b_vec: Vec::new() }
}
fn add_b(&mut self, b: B<F>) {
self.b_vec.push(b);
}
}
// B struct...
struct B<F> {
f: F,
}
// ...and its implementation
impl<F> B<F>
where
F: Fn(),
{
fn new(f: F) -> B<F> {
B { f: f }
}
}
// I add two B (with their closures arguments) in A
fn main() {
let mut a = A::new();
a.add_b(B::new(|| println!("test")));
a.add_b(B::new(|| println!("test2")));
}
这段代码导致:
error[E0308]: mismatched types
--> src/main.rs:39:20
|
39 | a.add_b(B::new(|| println!("test2")));
| ^^^^^^^^^^^^^^^^^^^^ expected closure, found a different closure
|
如何将多个具有不同闭包的B 添加到A 的b_vec?
【问题讨论】:
标签: rust