我理解在类的"新"方法中使用Perl中的"bless"关键字:
sub new { my $self = bless { }; return $self; }
但究竟什么是"祝福"对哈希引用呢?
通常,bless
将对象与类关联.
package MyClass; my $object = { }; bless $object, "MyClass";
现在当你调用一个方法时$object
,Perl知道要搜索该方法的包.
如果省略第二个参数,如示例中所示,则使用当前包/类.
为清楚起见,您的示例可能写成如下:
sub new { my $class = shift; my $self = { }; bless $self, $class; }
编辑:请参阅kixx的更好细节的答案.
bless
将引用与包关联.
引用的内容并不重要,它可以是散列(最常见的情况),数组(不常见),标量(通常这表示内向外对象),正则表达式,子程序或TYPEGLOB(参见" 面向对象的Perl:Damian Conway的概念和编程技术综合指南 "一书中的有用示例)或者甚至是对文件或目录句柄的引用(最不常见的情况).
效果bless
是它允许您将特殊语法应用于祝福的引用.
例如,如果存储了一个有福的引用$obj
(bless
与包"Class" 关联),那么$obj->foo(@args)
将调用一个子例程foo
并作为第一个参数传递引用,$obj
后跟其余的arguments(@args
).子程序应在包"Class"中定义.如果foo
包"Class"中没有子程序,@ISA
则将搜索其他包的列表(从包"Class"中的数组中获取),并且将调用foo
找到的第一个子例程.
简短版本:它标记了附加到当前包命名空间的散列(以便该包提供其类实现).
此函数告诉REF引用的实体它现在是CLASSNAME包中的对象,或者如果省略CLASSNAME则是当前包.建议使用两种形式的祝福.
示例:
bless REF, CLASSNAME bless REF
回报价值
此函数返回对包含在CLASSNAME中的对象的引用.
示例:
以下是显示其基本用法的示例代码,通过祝福对包的类的引用来创建对象引用 -
#!/usr/bin/perl package Person; sub new { my $class = shift; my $self = { _firstName => shift, _lastName => shift, _ssn => shift, }; # Print all the values just for clarification. print "First Name is $self->{_firstName}\n"; print "Last Name is $self->{_lastName}\n"; print "SSN is $self->{_ssn}\n"; bless $self, $class; return $self; }