gpt4 book ai didi

perl - 将 MooseX::Method::Signatures 导入调用者的作用域

转载 作者:行者123 更新时间:2023-12-04 22:25:23 28 4
gpt4 key购买 nike

我制作了一个“捆绑”模块,它做了很多事情:导入Moose , 进口 true , namespace::autoclean , 使调用者的类不可变(取自 MooseX::AutoImmute )。我无法弄清楚的一件事是如何包含 MooseX::Method::Signatures .

这是我到目前为止所得到的:

package My::OO;

use Moose::Exporter;
use Hook::AfterRuntime;

use Moose ();
use true ();
use namespace::autoclean ();

my ($import, $unimport, $init_meta) = Moose::Exporter->build_import_methods(
also => ['Moose'],
);
sub import {
true->import();

my $caller = scalar caller;
after_runtime { $caller->meta->make_immutable };

namespace::autoclean->import(-cleanee => $caller);

goto &$import;
}
sub unimport {
goto &$unimport;
}

1;

这个想法是,在我的代码中,我现在可以执行以下操作:
package My::Class; {
use My::OO;
extends 'My::Parent';
method foo() { ... }
}

但现在我仍然需要包含一个额外的 use MooseX::Method::Signatures; .如何将其包含到我的 OO 模块中?

最佳答案

首先,请注意 Hook::AfterRuntime 的执行相当脆弱。虽然它适用于许多简单的事情,但很容易以非常难以调试的错误告终。我建议只写 ->meta->make_immutable您自己,或使用其他方法来绕过编写它,例如 MooseX::Declare , 例如。

要回答您的实际问题:

MooseX::Method::Signatures->setup_for($your_caller);

关于perl - 将 MooseX::Method::Signatures 导入调用者的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647894/

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