我试图弄清楚如何使用 Moose 获取方法代码引用。
下面是我正在尝试做的事情的示例:
use Modern::Perl;
package Storage;
use Moose;
sub batch_store {
my ($self, $data) = @_;
... store $data ...
}
package Parser;
use Moose;
has 'generic_batch_store' => ( isa => 'CodeRef' );
sub parse {
my $self = shift;
my @buf;
... incredibly complex parsing code ...
$self->generic_batch_store(\@buf);
}
package main;
$s = Storage->new;
$p = Parser->new;
$p->generic_batch_store(\&{$s->batch_store});
$p->parse;
exit;
我上面链接的问题 https://stackoverflow.com/questions/4229562/how-to-take-code-reference-to-constructor详细介绍在代码引用中封装方法调用时的各种选项。对于你的情况,我会写main
封装为:
my $storage = Storage->new;
my $parser = Parser->new;
$parser->generic_batch_store(sub {$storage->batch_store(@_)});
$parser->parse;
$storage
更改为词法,以便代码引用sub {$storage->batch_store(@_)}
可以关闭它。这(@_)
添加到末尾允许将参数传递给方法。
我不是 Moose 专家,但我相信您需要使用附加的取消引用箭头来调用代码:
$self->generic_batch_store->(\@buf);
这只是以下内容的简写:
($self->generic_batch_store())->(\@buf);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)