【问题标题】:How can I use a code ref as a callback in Perl?如何在 Perl 中使用代码引用作为回调?
【发布时间】:2009-02-12 23:06:14
【问题描述】:

我的课堂上有以下代码:


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),它可以工作,但我想使用另一种调用代码参考的方式。

【问题讨论】:

  • 为什么要另一种方式来取消引用代码参考?使用有效的方法并继续下一个问题。 :)

标签: perl reference scripting callback


【解决方案1】:

& 符号只绑定到$self,而不是全部。您可以在返回引用的部分周围做卷曲:

&{$self->{callback}}($arg);

但是

$self->{callback}->($arg);

一般认为比较干净,你为什么不想用呢?

【讨论】:

  • 我的 perl 有点生锈了。我知道我错过了一些东西,我想知道那是什么:)。谢谢亚当!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多