-1. Limitações (apenas para pacotes)
O método EXPORTHOW chama .set_how na atual $?LANG
adicionando uma gíria à última.
Em seguida, adicione add_package_declarator ao MAIN
$?LANG
qual adiciona um package_declarator
método às suas ações e gramática. Acho que é a única "gíria dinâmica" (no World.nqp).
Se o que você deseja é substituir o rotina_declarador . Então você tem que escrever uma gíria que imita a corrente citada. Se você aceitar manter a palavra-chave method e criar a assinatura automática na classe, digamos de acordo com o nome do método, aqui está uma maneira:
Nota: Um pacote é um contêiner (pacote, gramática, módulo, função, know-how, enum, classe, subconjunto). Se você colocar o código dentro como um método, isso é executado (eu apenas tentei):
0. Descrição (EXPORTHOW)
Eu usaria EXPORTHOW não documentado e DECLARE
em um módulo porque não encontrei um caminho com a Phaser . Aparentemente, é tarde demais, mesmo no início.
O exemplo que dou é decorar todos os métodos de uma classe (par BUILDALL
).
1. Lib ( decorator.rakumod
)
class DecoratedClassHOW is Metamodel::ClassHOW {
method add_method(Mu $obj, $name, $code_obj) {
sub wrapper ($obj, $a, $b) {
say "Before $name";
my $res = $code_obj($obj, $a, $b);
say "After $name";
return $res;
}
my $res = callwith($obj, $name, &wrapper);
return $res;
}
}
my module EXPORTHOW {
package DECLARE {
constant decorated = DecoratedClassHOW;
}
}
2. Executável
use lib '.';
use decorator-lib;
decorated Foo {
method abc($a, $b) {
say "In abc: $a:$b";
}
}
my $f = Foo.new;
$f.abc(1, 2);
3. Saída
Before BUILDALL
After BUILDALL
Before abc
In abc: 1:2
After abc
4. Fontes