首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Perl的“上帝保佑”到底做了什么?

Perl的“上帝保佑”到底做了什么?
EN

Stack Overflow用户
提问于 2008-12-25 03:48:52
回答 5查看 108.4K关注 0票数 152

据我所知,在类的"new“方法中使用Perl中的"bless”关键字:

代码语言:javascript
复制
sub new {
    my $self = bless { };
    return $self;
}    

但是“上帝保佑”到底对那个散列引用做了什么呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-12-24 19:58:10

通常,bless将对象与类相关联。

代码语言:javascript
复制
package MyClass;
my $object = { };
bless $object, "MyClass";

现在,当您调用$object上的方法时,Perl知道要搜索该方法的包。

如果省略了第二个参数,如您的示例所示,则使用当前包/类。

为了清楚起见,您的示例可能如下所示:

代码语言:javascript
复制
sub new { 
  my $class = shift; 
  my $self = { }; 
  bless $self, $class; 
} 

编辑:有关更多细节,请参阅kixx的good answer

票数 152
EN

Stack Overflow用户

发布于 2008-12-24 20:39:54

bless将引用与包关联。

引用是什么并不重要,它可以是散列(最常见的情况)、数组(不常见的情况)、标量(通常表示inside-out object)、正则表达式、子例程或TYPEGLOB (有关有用的示例,请参阅Object Oriented Perl: A Comprehensive Guide to Concepts and Programming Techniques by Damian Conway一书),甚至可以是对文件或目录句柄的引用(最不常见的情况)。

bless-ing的作用在于,它允许您将特殊语法应用于受祝福的引用。

例如,如果一个有福的引用存储在$obj中(通过bless与包“Class”相关联),那么$obj->foo(@args)将调用子例程foo,并将引用$obj作为第一个参数传递,随后是其余参数(@args)。子例程应该在"Class“包中定义。如果“类”包中没有子例程foo,将搜索其他包的列表(取自包“类”中的数组@ISA ),并调用找到的第一个子例程foo

票数 84
EN

Stack Overflow用户

发布于 2008-12-24 19:54:06

简而言之:它将散列标记为附加到当前包名称空间(以便该包提供其类实现)。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/392135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档