使用`bless`创建一个具有继承的对象

时间:2015-03-24 08:42:45

标签: perl oop inheritance

如何使用bless创建具有继承的匿名类的对象?

我想我需要设置@ISA,但如何使用strict完成此操作?


在一丝райтфолд之后,我看了Class::Inner。他们通过

来解决继承问题
no strict 'refs';
@{"$anon_class\::ISA"} = $parent;

有没有办法实现仍然使用严格的参考?

3 个答案:

答案 0 :(得分:3)

使用parent设置班级的基类。 bless与继承无关:

package Derived;
use warnings;
use strict;
use parent qw(Base);

sub new {
    my $class = shift;
    return bless {}, $class;
}

答案 1 :(得分:2)

如果您正在玩这些内容,有时可能会违反strict。 Pragma strict可以保护您免受错误的侵害。如果您确定自己在做什么,那么在某些有限的范围内关闭strict是绝对可以的,并且最好仅限于您在OP中的具体事项。所以当你知道你做什么时,这段代码很好

{
    no strict 'refs';
    @{"$anon_class\::ISA"} = ($parent);
}

答案 2 :(得分:0)

  

有没有办法实现仍然使用严格的参考?

为什么呢?这正是严格意图抓住的东西。当然,你可以愚弄,但要清楚你正在做一些严格的事情通常是禁止的事情要好得多。

在我看来,

{ no strict 'refs'; @{ $anon_class . '::ISA' } = $parent; }

比使用eval%::要好得多(即使它们不再使用)。