我正在阅读“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/