加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl“反向逗号运算符”(例如,编程Perl,第4版)

发布时间:2020-12-15 23:27:28 所属栏目:大数据 来源:网络整理
导读:我正在阅读“ Programming Perl”并遇到了一个似乎没有意义的奇怪例子.本书描述了Perl中的逗号运算符如何在标量上下文中使用时仅返回最后的结果. 例: # After this statement,$stuff = "three"$stuff = ("one","two","three"); 然后,这本书在几页之后给出了
我正在阅读“ Programming Perl”并遇到了一个似乎没有意义的奇怪例子.本书描述了Perl中的逗号运算符如何在标量上下文中使用时仅返回最后的结果.

例:

# After this statement,$stuff = "three"
$stuff = ("one","two","three");

然后,这本书在几页之后给出了这个“反向逗号运算符”的例子(第82页)

# A "reverse comma operator".
return (pop(@foo),pop(@foo))[0];

然而对我来说,这似乎并没有反过来……?

例:

# After this statement,$stuff = "three"
$stuff = reverse_comma("one","three");

# Implementation of the "reverse comma operator"
sub reverse_comma {
    return (pop(@_),pop(@_))[0];
}

这与正常的逗号运算符有何不同?结果是一样的,没有逆转!

这是一个确切页面的link.这个例子靠近底部.

解决方法

这是一个糟糕的例子,应该被遗忘.

它的演示很简单:

>通常,如果在标量上下文中有逗号分隔的表达式序列,则可以将其解释为逗号运算符的实例,该运算符将计算序列中的最后一项.
>但是,如果您将该序列放在括号中并在末尾粘贴[0],它会将该序列转换为列表并获取其第一个元素,例如

my $x = (1,2,3)[0];

出于某种原因,本书将其称为“反向逗号运算符”.这用词不当;它只是一个列出第一个元素的列表.

通过在参数中使用pop函数两次,本书令人困惑.这些从左到右进行评估,因此第一个pop评估为“three”,第二个pop评估为“two”.

在任何情况下:不要在实际代码中使用逗号或“反向逗号”运算符.两者都可能会让未来的读者感到困惑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读