我试图理解为什么会这样:
say 4 x 2.5 * 2;
生产
88
而不是
44444
如下:
say 4 x (2.5 * 2);
我试图解释第二个的方法是,因为运算符x期望一个数字作为正确的参数,2.5 * 2被计算为数字5,然后4被视为字符串,产生“44444”。但我无法解释第一个!将其更改为打印也无关紧要。
print 4 x 2.5 * 2 . "\n"
也给出了
88
当然,我不打算写这样的代码。我只是想了解这种行为。
答案 0 :(得分:7)
重复运算符x
和乘法*
具有same precedence。两者都是左联想的。因此,
4 x 2.5 * 2
是
(4 x 2.5) * 2
因为x
的第二个参数必须是整数,所以这相当于
(4 x 2) * 2
"44" * 2
。我们有88
。
如果有疑问,请使用明确的parens让编译器明确表达您的意图:
say 4 x (2.5 * 2);