Определение новых инфиксных операторов в Raku - PullRequest
8 голосов
/ 11 июля 2020

Скажите, пожалуйста, как определить новый оператор в Raku, например, как реализовать оператор стрелки, определяющий что-то вроде этого:

operator ▶ {my ($left, $right) = @_; $left->{$right}}

1 Ответ

12 голосов
/ 11 июля 2020

Это довольно просто:

sub infix:<▶> ($left, $right) {
  $left."$right"() 
}


# Example: 

class Foo {
  method bar { "hello" }
}

my $a = Foo.new;

say $a ▶ 'bar'
# hello

sub infix:< > определяет новые инфиксные операторы (другие варианты: prefix, postfix, circumfix и postcircumfix, последние два требуют открывающая и закрывающая части, например <( )> для открывающих и закрывающих круглых скобок).

($left, $right), как следует из названия, обрабатывает значения левой и правой стороны.

Для вызова метода на основе строки вы используете структуру ." "() с именем метода в кавычках и последующими круглыми скобками - даже если аргументов нет. В этом случае мы просто вставляем переменную для базовой c интерполяции, хотя возможны и более сложные операции.

...