perl - 驼鹿和扩展非驼鹿类

标签 perl inheritance moose

我有以下类/包:

package Data::CrawlerThreadPool;
use Moose;
use MooseX::InsideOut;
use MooseX::NonMoose;

extends 'Thread::Pool::Simple';

around BUILDARGS => sub {
      my $orig  = shift;
      my $class = shift;
      return $class->$orig( do  => [\&_do_handle],
                            min => 5,
                            max => 10 );
};

sub _do_handle {
    $| = 1;
    print "In Do handle";
}
1;

在我的主脚本中,我这样调用它(例如...):

#!/usr/bin/env perl
use strict;
use warnings;
use Data::CrawlerThreadPool;

my $tp = Data::CrawlerThreadPool->new();
my @args = qw(0 0 0 0 0 0 0 0 0);
$tp->add(@args) for (0..10);
$tp->join();

似乎调用了 BUILDARGS 方法,但从未调用过处理句柄。 我在这里错过了什么? Thread::Pool::Simple

谢谢,

最佳答案

\&_do_handle 没有调用 _do_handle sub - 它只是解除对 sub 的引用。这个习语通常在 eval {} 中使用,以检查您是否真的有一个 subref(或一个带有 subref 重载的对象)——我认为这不是您打算做的在这里。

如果您打算实际调用 _do_handle,则直接调用它:

around BUILDARGS => sub {
      my $orig  = shift;
      my $class = shift;
      return $class->$orig( do  => [ _do_handle() ],
                            min => 5,
                            max => 10 );
};

关于perl - 驼鹿和扩展非驼鹿类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992132/

相关文章:

php - 完整性约束违规 - 如何使用类表继承在 Doctrine 中创建实体

Perl,Moose - 子类不继承父类(super class)的方法

perl - 通过在 Perl 中使用矩阵结构打印特殊字符 say * 和空格在控制台中绘制图形

perl - 在 Perl 中处理时间数学的最佳方法是什么?

c++ - 基类变量为 `not declared in its scope`

c++ - 需要使用私有(private)继承的设计帮助

perl - Moose 中的单例角色

perl - 如何让 Moose 返回一个子类实例而不是它自己的类,以实现多态性

perl - 如何使用 Perl 仅解析文件的一部分?

perl 的 pod2usage(-verbose => 2) 显示源代码而不是格式化文档