use*_*860 3 perl auto-increment
将有人请解释下一个:
在"Programming Perl"一书中,postfix autoincrement operator被描述为
放置之后,它们(
$a--,$a++)在返回值后递增或递减变量.
因此,据我所知,$a++从未在虚空环境中使用,因为有人说过
他们增加或减少变量
但在下一个示例中,变量的值永远不会改变:
my $a = 3;
$a = $a++;
say $a; #always outputs 3
Run Code Online (Sandbox Code Playgroud)
所以我的假设是,当将值分配给同一个变量时,没有理由使用后自动递增,但是"编程Perl"中的定义应该被认为是错误的,因为运算符不会影响变量,而是变量中的值(至少在那个例子中).是对的吗?
提前欣赏.
rai*_*7ow 16
为什么,postfix自动增量和自动减量运算符实际上经常在void上下文中使用,因为它们影响变量 - 而不是值.
您的示例以其工作方式工作,因为变量在将旧值分配给它之前会后递增.换句话说,顺序
my $a = 3; $a = $a++;
Run Code Online (Sandbox Code Playgroud)
...是... ...
1) $old_value = $a;
2) $a = $a + 1;
3) $a = $old_value;
Run Code Online (Sandbox Code Playgroud)
如果您更换$a = $a++同$b = $a++在你的榜样,和$ b的值,打印和$一个之后,你就会清楚地看到的区别:虽然$a变(因此,等于4)增加,$b被分配的旧值$a(3).
sim*_*que 10
所以我的假设是,当将值赋给同一个变量时,没有理由使用后自动递增,但是"编程Perl"中的定义应该被认为是错误的,因为操作符不会影响变量,而是变量中的值.是对的吗?
我认为这是关于术语的.
有$a++和++$a.它们都会影响变量$a.
my $a = 3;
$a++;
say $a;
Run Code Online (Sandbox Code Playgroud)
给你4,但同样如此
my $a = 3;
++$a;
say $a;
Run Code Online (Sandbox Code Playgroud)
不同之处在于他们的回报.
$a++首先返回旧值,然后递增它.++$a首先进行增量,然后返回新值.
my $a = 3;
say $a++;
say $a;
Run Code Online (Sandbox Code Playgroud)
给你:
3
4
Run Code Online (Sandbox Code Playgroud)
而:
my $a = 3;
say ++$a;
say $a;
Run Code Online (Sandbox Code Playgroud)
打印:
4
4
Run Code Online (Sandbox Code Playgroud)
但是你很难将返回值$a++赋给变量.您更有可能在另一个操作中使用它,在这个操作中,您首先要使用旧值,然后再增加变量.
以下是一些非常蹩脚的例子:
my $a = 3;
say $a while $a--;
Run Code Online (Sandbox Code Playgroud)
打印:
2
1
0
Run Code Online (Sandbox Code Playgroud)
和:
my $a = 3;
say $a while --$a;
Run Code Online (Sandbox Code Playgroud)
打印:
2
1
Run Code Online (Sandbox Code Playgroud)
有时候有些情况下你需要0或0的索引.有时候你不想要它.两者都是有用的imho.
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |