37. Обращающий метаоператор R в Perl 6

В Perl 6 есть метаоператор R, который меняет операнды у другого оператора. Как и другие метаоператоры, R модифицирует поведение одного из уже существующих операторов, как встроенных, так и определенных пользователем.

1

Проще всего начать с элементарного примера.

say 5 R- 3; # -2

Без R получилось бы 2, а с ним запись 5 R- 3 равносильна 3 - 5.

Еще один пример, с оператором %%, который сообщает, делимо ли одно число на другое.

say 3 R%% 10; # False
say 3 R%% 12; # True

2

Можно попробовать применить метаоператор в выражении с двумя и более операциями. Например:

say 10 R- 20 R- 40; # 10

Здесь в обоих случаях стоит оператор минус, так что в итоге мы получаем 40 - (20 - 10).

Подобные конструкции c R вполне можно завернуть в оператор редукции. Предыдущий пример более наглядно (если это слово здесь применимо) записывается так:

say [R-] 10, 20, 40; # 10

2 thoughts on “37. Обращающий метаоператор R в Perl 6”

  1. После прочтения всех этих новшеств возникает ощущение, что в перл6 напихали всего по-максимум просто «потому что можем». Никакого особого смысла в подобных операторах не видно, кроме того читаемость, за что вечно хаяли перл5, будет ещё хуже, всё это нагромождение «чудесных» операторов только повышает шанс не поставить лишний символ (~~ ~~~ .. … etc.), не заметить его при прочтении кода, а ещё ж и юникодные аналоги, ещё и свои операторы хитросимвольные и так далее, тем не менее перл6 скушает это всё и отработает, а если ещё принять во внимание, что у некоторых операций и операторов есть и внутренний «искусственный интеллект», как у операции инкремента строк с именем файла внутри, то вообще что-то понять в реальной программе, написанной скиловым перл6виком, будет практически нереально, это будет мешанина (спец-)символов в разы массивнее, чем перл5. Конечно, timwtdi никто не отменял, но откровенно позволяя, развивая и поощряя все эти разные способы какого-то успеха вряд ли удасться добиться языку.

    1. Тестируйте свой код на любом языке, создавайте искусственные ошибки, смотрите как ваша программа будет работать и реагировать на эти ошибки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Retype the CAPTCHA code from the image
Change the CAPTCHA codeSpeak the CAPTCHA code