gpt4 book ai didi

Perl "reverse comma operator"(来自《Programming Perl》一书的示例,第 4 版)

转载 作者:行者123 更新时间:2023-12-04 21:56:15 30 4
gpt4 key购买 nike

我正在阅读“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", "two", "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"第二个到 "two" .

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

    关于Perl "reverse comma operator"(来自《Programming Perl》一书的示例,第 4 版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849635/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com