gpt4 book ai didi

module - 如何自动加载模块子例程?

转载 作者:行者123 更新时间:2023-12-01 00:19:04 24 4
gpt4 key购买 nike

在 Perl 5 中,模块可以声明 AUTOLOAD() 如果调用未定义的子例程,则将调用该子例程。类似地,在 Perl 6 类中有一个 FALLBACK() 方法。但我找不到类似于 FALLBACK() 的内容对于模块。

这是一个用例的例子:我想写一个新模块MyModule导出另一个模块 OtherModule 的所有子例程导出,然后将所有子例程调用转发到 MyModule 中的那些导出方法(尚未定义)到OtherModule中的相应子程序.我想我可以从 OtherModule 获取导出的符号使用 CompUnit::Util .

问题 : 如何在 Perl 6 中实现 Perl 5 的自动加载机制?

最佳答案

词法名称是静态解析的,所以我不确定如何实现AUTOLOAD没有一些深奥的魔法。

关于您的具体示例,我也不太确定这样做的“正确”方法是什么,但这是一个似乎可行的“肮脏”解决方案,替换了子 &foo由模块导出 Foo :

# get all subroutines exported by Foo by default
BEGIN my @reex = do {
use Foo;
MY::.pairs.grep(*.key.starts-with('&'));
}

# export our replacement subroutine (also in the default namespace)
sub foo is export {
say "new foo";
}

# re-export subroutines lacking a replacement
# placed at the end of the module so EXPORT will have been populated
BEGIN EXPORT::DEFAULT::{.key} //= .value
for @reex;

关于module - 如何自动加载模块子例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com