首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl,shift if(@_)

Perl,shift if(@_)
EN

Stack Overflow用户
提问于 2014-06-02 18:47:40
回答 5查看 1.3K关注 0票数 2

谁能告诉我

代码语言:javascript
复制
shift if(@_)

意味着在perl中?

那又是什么

代码语言:javascript
复制
sub id {
   my $self = shift;
   $self->{ID} = shift if @_;

   return $self->{ID};
}

卑劣?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-02 18:49:10

在sub中,没有参数的shift使用@_数组。

所以

代码语言:javascript
复制
$self->{ID} = shift if @_;

等于

代码语言:javascript
复制
$self->{ID} = shift(@_) if @_;

(从@_数组中删除最左边的元素并将其分配给$self->{ID})

票数 4
EN

Stack Overflow用户

发布于 2014-06-02 18:52:11

它是对象的手动访问器/变体。

代码语言:javascript
复制
print $obj->id;       # Accessor form
$obj->id(NEW_VAL);    # Mutator form

它在功能上相当于:

代码语言:javascript
复制
sub id {
    my $self = shift;
    if (@_) { # If called with additional parameters, set the value:
         $self->{ID} = shift(@_);
    }
    return $self->{ID};
}
票数 5
EN

Stack Overflow用户

发布于 2014-06-02 18:53:26

shift从数组中取出第一个元素并返回它。如果没有给定数组,则在@_上操作,该数组包含函数参数。只有当if @_至少有一个元素时,@_语句修饰符才会导致执行前面的语句。

在您的示例中,$self->{ID} = shift @_ if @_;的意思是“如果存在函数参数,则将其分配给$self->{ID}

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

https://stackoverflow.com/questions/24001241

复制
相关文章

相似问题

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