在Perl 6中减少逻辑运算符

5

我正在尝试减少and的使用,但是输出结果很奇怪:

> [and] 2>1, 3>2, put 1, put 2
2
1True

同时,如果我在每个表达式之间加上and,一切都没问题。
> 2>1 and 3>2 and put 1 and put 2
1
2

这种差异的原因是什么?

3
请注意,put 1 返回 Trueput 1, put 2 等同于 put (1, put 2)。您在使用 put 语句时想要实现什么目的? - Håkon Hægland
2
@HåkonHægland 谢谢!加上括号解决了问题:[and] 2>1, 3>2, (put 1), (put 2) - Eugene Barsky
1个回答

8
为了阐述Håkon的评论。区别在于优先级。
这两个语句相当于以下内容:
> [and] (2>1), (3>2), (put 1,(put 2))
2
1True
> (2>1) and (3>2) and (put 1) and (put 2)
1
2

在第一种情况下,它首先评估put 2,打印出2并返回True,然后是put 1,True,打印1True,返回True。整个表达式的评估结果为True,但不会再打印任何内容。
在第二种情况下,put 1首先被评估,打印出1并返回True,然后评估put 2,打印2并同样返回True。再次,整个表达式的评估结果为True,但不会再打印任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接