1

我试图了解为什么会出现以下情况:

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

当然,我不打算编写这样的代码。我只是想了解这种行为。

4

1 回答 1

7

重复运算符x和乘法*具有相同的优先级。两者也是左联想。因此,正确的括号

4 x 2.5 * 2

(4 x 2.5) * 2

因为 for 的第二个参数x必须是整数,所以这相当于

(4 x 2) * 2

Which does "44" * 2. There we have our 88.

If in doubt, use explicit parens to make your intentions clear to the compiler:

say 4 x (2.5 * 2);
于 2013-07-28T03:06:57.807 回答