我的类里面有以下代码:
sub new {
my $class = shift;
my %args = @_;
my $self = {};
bless( $self, $class );
if ( exists $args{callback} ) {
$self->{callback} = $args{callback};
}
if ( exists $args{dir} ) {
$self->{dir} = $args{dir};
}
return $self;
}
sub test {
my $self = shift;
my $arg = shift;
&$self->{callback}($arg);
}
和一个包含以下代码的脚本:
use strict;
use warnings;
use MyPackage;
my $callback = sub {
my $arg = shift;
print $arg;
};
my $obj = MyPackage->new(callback => $callback);
但我收到以下错误:
Not a CODE reference ...
我错过了什么?打印
ref($self->{callback})
显示 CODE
.如果我使用 $self->{callback}->($arg)
就可以了,但我想使用另一种调用代码引用的方式。
最佳答案
& 号仅绑定(bind)到 $self
而不是全部。您可以在返回引用的部分周围做 curl :
&{$self->{callback}}($arg);
但是
$self->{callback}->($arg);
一般认为比较干净,为什么不想用呢?
关于perl - 如何在 Perl 中使用代码引用作为回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/543929/