You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用require循环遍历Plugin类并调用其enable方法?

正确实现方式

你的核心问题是混淆了模块加载语法和类符号查找的用法,以下是修正后的代码:

unit class Top;
has $!rdp;

submethod TWEAK {
    my $rdp := self.rdp;
    for <A B C> -> $plugin {
        # 构建模块/类的完整名称
        my $class-name = "Plugin::$plugin";
        # 动态加载对应模块
        require ::($class-name);
        # 获取类对象、实例化并调用enable方法
        ::($class-name).new.enable($rdp);
    }
}

关键修正点:

  • 用::($class-name)作为require的参数:Raku中require可以接受符号表中的模块名称,通过字符串插值构建完整模块名后,用::()解析为模块引用完成加载。
  • 统一类名的构建逻辑:将Plugin::与循环变量拼接,确保模块名和类名的一致性(假设你的插件模块中定义了同名类)。

如果你的插件文件路径和命名空间严格对应(比如Plugin/A.rakumod对应Plugin::A类),上述代码就能正常工作。

另外,也可以用use-ok替代require,效果类似(都是运行时加载模块):

for <A B C> -> $plugin {
    my $class-name = "Plugin::$plugin";
    use-ok $class-name;
    ::($class-name).new.enable($rdp);
}

内容的提问来源于stack exchange,提问作者Richard Hainsworth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:17:22