16. Создание своих операторов в Perl 6, часть 3

В третьей части мы рассмотрим еще два вида операторов — circumfix и postcircumfix. Начнем с более сложного на вид названия.

Postcircumfix

С операторами такого типа вы все встречались: типичный пример — индексирование массива: @a[$i]. Сам по себе оператор — это пара скобок. Операнды (аргументы) оператора — массив и индекс.

Еще два примера — круглые скобки для вызова функции и угловые скобки для создания массива:

my @a = < a b c >;

Создадим свой:

sub postcircumfix:<¿ ?>(Str $question, Str $answer) {
    say "Q: $question";
    say "A: $answer";
}

"Hello"¿"World"?;

Эта программа напечатает следующее:

Q: Hello
A: World

В качестве домашнего задания, создайте более осмысленный пример оператора этого типа.

Circumfix

Этот тип оператора еще менее похож на оператор, но тем не менее, с точки зрения языка, это полноправный оператор. Рассмотрим пример с теми же символами:

sub circumfix:<¿ ?>(Str $str) {
    $str.chars
}

say ¿'Hello, World!'?; # 13

Программа печатает длину строки. Вопросительные знаки стали двумя частями оператора, одна часть стоит до, вторая после операнда.

2 thoughts on “16. Создание своих операторов в Perl 6, часть 3”

  1. Если я правильно понимаю, угловые скобки считаются постциркумфиксом, только если они заключают несколько аргументов хеша (как аналог {}): https://docs.perl6.org/language/operators#postcircumfix_. А если они просто создают список (quote-words construct), то нет: https://docs.perl6.org/language/operators#Term_Precedence.

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

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