如何使用bless
创建具有继承的匿名类的对象?
我想我需要设置@ISA
,但如何使用strict
完成此操作?
在一丝райтфолд之后,我看了Class::Inner
。他们通过
no strict 'refs';
@{"$anon_class\::ISA"} = $parent;
有没有办法实现仍然使用严格的参考?
答案 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
或%::
要好得多(即使它们不再使用)。