Rust如何传递方法指针向量至run_all方法执行并解决编译报错
问题修复方案
完整可运行代码
pub struct Comp; impl Comp { pub fn talk(&self, i: i32) { println!("talking = {}", i); } pub fn run_all(&self, fn_vec: Vec<fn(&Self, i32)>) { for a in fn_vec.into_iter() { a(self, 7); } } } fn main() { let my_comp = Comp; let mut my_vec: Vec<fn(&Comp, i32)> = Vec::new(); my_vec.push(Comp::talk); my_vec.push(Comp::talk); my_comp.run_all(my_vec); }
核心修改说明
- 解决
E0411报错:Self关键字仅允许在impl块、trait定义、类型定义的上下文中使用,main函数不属于上述合法上下文,因此需要将类型声明中的&Self显式替换为&Comp。 - 解决
E0615报错:Rust不支持通过实例直接获取方法指针,方法属于类型的关联项,需要使用Comp::talk的完全限定形式获取对应的函数指针。 - 补充必要调整:
fn(参数类型)本身就是轻量的函数指针类型,不需要额外套&引用;同时存储元素的Vec需要声明为mut可变,才能执行push写入操作。 - 原代码中的
a(self, 7)调用写法完全符合Rust规范,无需修改。
内容的提问来源于stack exchange,提问作者ender maz
相关产品推荐
相关产品推荐

