我有以下问题:
我目前的计划是将方法本身传递给A中的方法,并将B的一个实例自引用到A中的方法.然而,我很难理解类型定义.我可以将第二个参数的类型硬编码为B,但是,我希望将其保持打开状态,以防 struct C也希望使用a中的方法.因此,我希望将第二个参数的类型设置为 struct 的类型,第一个参数中的方法是在该 struct 中发起的.有没有办法做到这一点?我当时在考虑泛型,但我还没能实现它.
编辑:在rustplayground 中添加了一个最小的示例.这段代码让我烦恼的是,我想摆脱硬编码&;B在某些函数中,因为这不适用于 struct C.
struct A {}
impl A {
fn some_func_a(&self, passed_fn: fn(&B, i32), cur_self: &B) {
passed_fn(cur_self, 21);
}
}
struct B {
some_val: i32,
}
struct C {
some_val: u32, // different field here than in B
}
impl B {
fn call_fn_in_a(&self, a: A) {
a.some_func_a(B::some_func_b, self);
}
fn some_func_b(&self, passed_val: i32) {
println!("The value is {}, passed was {}", self.some_val, passed_val)
}
}
impl C {
fn call_fn_in_a(&self, a: A) {
// this line here breaks, since &B is hard coded
a.some_func_a(C::some_func_c, self);
}
fn some_func_c(&self, passed_val: i32) {
println!("this is a new function, val is {}, passed was {}", self.some_val, passed_val)
}
}
fn main() {
let a = A {};
let b = B {
some_val: 42,
};
let b = B {
some_val: 42,
};
b.call_fn_in_a(a);
}