Perl “bless”在支撑结构中起什么作用?
引用自Perl “bless”在支撑结构中起什么作用?,perl,Perl,引用自HTML/Template.pm,为什么不简单地祝福$self,$pkg,因为$self是未定义的-几乎等同于: my $self; { my %hash; $self = bless(\%hash, $pkg); } 或: 编辑回答评论: 你不能祝福一个未定义的值,因为你会得到错误,不能祝福…处的非参考值。这是因为只有硬引用才能被祝福。这就是Perl强制对象封装的方式。请参阅。我认为其目的是将%hash的范围限制在封闭块内。这可以改写为: $self = bless( {}, $pkg
HTML/Template.pm
,为什么不简单地祝福$self,$pkg,因为$self
是未定义的
-几乎等同于:
my $self; { my %hash; $self = bless(\%hash, $pkg); }
或:
编辑回答评论:
你不能祝福一个未定义的值,因为你会得到错误,不能祝福…
处的非参考值。这是因为只有硬引用才能被祝福。这就是Perl强制对象封装的方式。请参阅。我认为其目的是将%hash
的范围限制在封闭块内。这可以改写为:
$self = bless( {}, $pkg);
在以下声明中:
$hash = {};
^^^^^ ^^
referrer referent
将$hash
引用的引用对象(匿名哈希)标记为$pkg
(HTML::Template类)的对象。它不会改变$hash
变量
bless
函数返回对受祝福匿名哈希的引用$self
因此成为对受祝福的匿名散列(referent)的引用
重要的是要记住,如果bless
函数的第一个参数是引用,那么被引用的是它所引用的东西,而不是变量本身:
$self = bless( $hash, $pkg );
$self
没有引用任何东西-它是undef
。没有可祝福的参照物。这相当于尝试这样做:
$self = bless( $self, $pkg );
提供了一个很好的主题介绍。你的意思是undef
vars不能被祝福吗?我的意思是undef
与hash ref不同:)为什么我不能先祝福它,然后再初始化它?@Learning,因为得到祝福的是引用,而不是变量。你不能祝福undef
,因为它不是一个参考。@cjm,那bless\$self,$pkg代码>?
$self = bless( $hash, $pkg );
$self = bless( $self, $pkg );
$self = bless( undef, $pkg );