Я пытаюсь написать пример для класса X::NYI
в ответ на эту проблему .Я придумал что-то вроде этого:
class Nothing {
sub postfix:<.&>( $sub, **@args) {
die X::NYI.new( feature => $sub,
did-you-mean => "nothing",
workaround => "Implement it yourself" );
}
}
my $let's-see = Nothing.newish;
, который пытается переопределить постфиксный оператор вызова метода , чтобы вызвать исключение для всего, что вызывается.Это не работает:
No such method 'newish' for invocant of type 'Nothing'
в блоке на NYI.p6, строка 13
И, фактически, документация гласит:
Технически, а нереальный оператор;это специальный синтаксис в компиляторе.
Что, скорее всего, означает, что его нельзя переопределить.Это также означает, что выполнение того, что я хочу, подразумевает взаимодействие с метамоделью для перехвата метода разрешения класса.Но я не понимаю, как это можно сделать.Большинство примеров в источнике Rakudo, таких как этот , генерируют исключение при вызове конкретной функции, и, на самом деле, исключение, которое мы видим, выдается методом dispatch
в Mu
уровень .
Так будет ли переопределение dispatch
правильным способом делать подобные вещи?Или что-то еще совершенно другое?