请解释这个明显不一致的行为:
$a = b, c;
print $a; # this prints: b
$a = (b, c);
print $a; # this prints: c
Run Code Online (Sandbox Code Playgroud)
Eug*_*ash 16
该=运营商的优先级高于,.并且逗号运算符抛弃其左参数并返回正确的参数.
请注意,逗号运算符的行为取决于上下文.来自perldoc perlop:
二进制","是逗号运算符.在标量上下文中,它评估其左参数,抛出该值,然后计算其右参数并返回该值.这就像C的逗号运算符一样.
在列表上下文中,它只是列表参数分隔符,并将其参数插入列表中.这些参数也从左到右进行评估.
由于eugene的答案似乎留下了OP的一些问题,我试着解释一下:
$a = "b", "c";
print $a;
Run Code Online (Sandbox Code Playgroud)
左边的参数是$a = "b"因为=它的优先级高于,首先评估的优先级.之后$a包含"b".
正确的论点是"c",并将在我即将展示时返回.
在您打印时,$a它显然会打印b到您的屏幕上.
$a = ("b", "c");
print $a;
Run Code Online (Sandbox Code Playgroud)
这里("b","c")将首先评估该术语,因为括号的优先级更高.它返回"c",并将分配给$a.
所以在这里打印"c".
$var = ($a = "b","c");
print $var;
print $a;
Run Code Online (Sandbox Code Playgroud)
这里$a包含"b"并$var包含"c".
一旦获得优先规则,这就完全一致了
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |