我从命令行运行这个单行程序:
perl -MList::Util=sum -E 'my $x = 0; say sum(++$x, ++$x)'
Run Code Online (Sandbox Code Playgroud)
为什么说"4"而不是"3"?
首先,请记住Perl通过引用传递.这意味着
sum(++$x, ++$x)
Run Code Online (Sandbox Code Playgroud)
基本上是一样的
do {
local @_;
alias $_[0] = ++$x;
alias $_[1] = ++$x;
∑
}
Run Code Online (Sandbox Code Playgroud)
预增量返回变量本身,而不是它的一个副本*,因此,这意味着这两个$_[0]和$_[1]的别名$x.因此,sum查看两个参数的当前值$x(2).
经验法则:不要修改和读取同一语句中的值.
* - 这没有记录,但你问为什么Perl的行为方式如此.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |