使用 `bless` 创建具有继承性的对象
Create an object with inheritance using `bless`
如何使用 bless
继承创建匿名 class 的对象?
我想我需要设置 @ISA
,但是如何使用 strict
来完成?
在 райтфолд 的提示后,我看了一下 Class::Inner
。他们通过
解决继承问题
no strict 'refs';
@{"$anon_class\::ISA"} = $parent;
有没有办法仍然使用严格的引用来完成它?
使用 parent
为您的 class 设置基数 class。 bless
与继承无关:
package Derived;
use warnings;
use strict;
use parent qw(Base);
sub new {
my $class = shift;
return bless {}, $class;
}
如果你在玩这些东西,你有时会违反 strict
。 Pragma strict
是为了保护你不犯错误。如果您确定自己在做什么,则绝对可以在某些有限范围内关闭 strict
并且最好限制在您的 OP 中的特定内容。所以当你知道自己在做什么时,这段代码就很好
{
no strict 'refs';
@{"$anon_class\::ISA"} = ($parent);
}
Is there a way to accomplish that still using strict refs?
为什么?这正是 strict 旨在捕捉的东西。当然,你可以愚弄严格,但最好清楚你正在做一些通常严格禁止的事情。
在我看来,
{ no strict 'refs'; @{ $anon_class . '::ISA' } = $parent; }
比使用 eval
或 %::
好得多(即使它们并不长)。
如何使用 bless
继承创建匿名 class 的对象?
我想我需要设置 @ISA
,但是如何使用 strict
来完成?
在 райтфолд 的提示后,我看了一下 Class::Inner
。他们通过
no strict 'refs';
@{"$anon_class\::ISA"} = $parent;
有没有办法仍然使用严格的引用来完成它?
使用 parent
为您的 class 设置基数 class。 bless
与继承无关:
package Derived;
use warnings;
use strict;
use parent qw(Base);
sub new {
my $class = shift;
return bless {}, $class;
}
如果你在玩这些东西,你有时会违反 strict
。 Pragma strict
是为了保护你不犯错误。如果您确定自己在做什么,则绝对可以在某些有限范围内关闭 strict
并且最好限制在您的 OP 中的特定内容。所以当你知道自己在做什么时,这段代码就很好
{
no strict 'refs';
@{"$anon_class\::ISA"} = ($parent);
}
Is there a way to accomplish that still using strict refs?
为什么?这正是 strict 旨在捕捉的东西。当然,你可以愚弄严格,但最好清楚你正在做一些通常严格禁止的事情。
在我看来,
{ no strict 'refs'; @{ $anon_class . '::ISA' } = $parent; }
比使用 eval
或 %::
好得多(即使它们并不长)。