Сокращение логических операторов в Perl 6 - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь уменьшить 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

В чем причина этой разницы?

1 Ответ

0 голосов
/ 27 сентября 2018

Чтобы уточнить комментарий Хокон.Разница в приоритете.

Эти два утверждения эквивалентны следующим:

> [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, но больше ничего не печатает.

...