You need to enable JavaScript to run this app. Rust如何传递方法指针向量至run_all方法执行并解决编译报错
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 08:30:05