inter forum

Главная категория => Программирование => Raku (ex Perl 6) => Тема начата: inter 🐵 от 30 Ноябрь 2017, 17:34:55

Название: [Perl 6] Операторы
Отправлено: inter 🐵 от 30 Ноябрь 2017, 17:34:55
https://docs.perl6.org/language/operators

Операторов ооочень много, я их пока все не запомнил. Ниже будут примеры.
Операторы могут быть в разных позициях применения:

Operator classification 
Operators can occur in several positions relative to a term:
+termprefix
term1 + term2infix
term++postfix
(term)circumfix
term1[term2]postcircumfix
Название: Re: [Perl 6] Операторы
Отправлено: inter 🐵 от 17 Январь 2018, 16:55:44
prefix
Создание своих операторов в Perl 6, часть 1 (https://perl6.ru/2018/01/13/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%b2%d0%be%d0%b8%d1%85-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%be%d0%b2-%d0%b2-perl-6-%d1%87%d0%b0%d1%81%d1%82%d1%8c-1/)
sub prefix:<§>($str) {
    $str.uc
}

say §'hello, world!'; # HELLO, WORLD!

sub prefix:<🔊>(Str $str) {
    $str.uc
}
say 🔊'hello, world!';

infix
Создание своих операторов в Perl 6, часть 2 (https://perl6.ru/2018/01/15/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%b2%d0%be%d0%b8%d1%85-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%be%d0%b2-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/)
https://docs.perl6.org/language/operators#Dotty_Infix_Precedence
sub infix:<≈>($a, $b) {
    abs($a) - abs($b) < 1
}

say 3.14 ≈ pi; # True

postfix
https://docs.perl6.org/language/operators#postfix_.
sub postfix:<!>(Int $n) {
    [*] 1..$n
}

say 5!; # 120

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

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

postcircumfix
Method Postfix Precedence (https://docs.perl6.org/language/operators#Method_Postfix_Precedence)
Создание своих операторов в Perl 6, часть 3 (https://perl6.ru/2018/01/16/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%b2%d0%be%d0%b8%d1%85-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%be%d0%b2-%d0%b2-perl-6-%d1%87%d0%b0%d1%81%d1%82%d1%8c-3/)
sub postcircumfix:<¿ ?>(Str $question, Str $answer) {
    say "Q: $question";
    say "A: $answer";
}

"Hello"¿"World"?;

# Q: Hello
# A: World
Название: Re: [Perl 6] Операторы
Отправлено: inter 🐵 от 23 Январь 2018, 11:40:55
Reversed operator (https://docs.perl6.org/language/operators#Reversed_Operators)

Реальный пример из модуля zef:
my $meta6-prefix = '' R// $!extractor.ls-files($candi.uri).sort.first({ .IO.basename eq 'META6.json' });
Символ R перед оператором // меняет порядок проверки сторон на противоположный.
Сначала будет проверено значение правой части от R// и если оно не определено, то тогда результатом будет значение слева.

Напомним, что оператор // это defined-or operator:
say Any // 0 // 42; # 0

Ещё пример из документации:
say 4 R/ 12;        # OUTPUT: «3␤» 
say [R/] 2, 4, 16;  # OUTPUT: «2␤»