-1. Keterbatasan (hanya untuk paket)
Metode EXPORTHOW memanggil .set_how saat ini $?LANG
menambahkan slang ke yang terakhir.
Kemudian add_package_declarator ke MAIN
$?LANG
yang menambahkan package_declarator
metode untuk Tindakan dan Grammar. Ini, saya pikir, satu-satunya "gaul dinamis" (dalam World.nqp).
Jika yang Anda inginkan adalah menimpa routine_declarator . Maka Anda harus menulis bahasa gaul yang meniru rantai yang baru saja dikutip. Jika Anda setuju untuk menyimpan kata kunci metode dan membuat tanda tangan otomatis di kelas, ucapkan sesuai dengan nama metode, berikut ini caranya:
Catatan: Paket adalah wadah (paket, tata bahasa, modul, peran, pengetahuan, enum, kelas, subset). Jika Anda memasukkan kode ke dalam seperti metode, ini dijalankan (Saya baru saja mencoba):
0. Keterangan (EKSPORTHOW)
Saya akan menggunakan EXPORTHOW tidak berdokumen dan DECLARE
dalam modul karena saya tidak menemukan cara dengan Phaser . Tampaknya sudah terlambat bahkan di BEGIN.
Contoh yang saya berikan, adalah mendekorasi setiap metode dalam kelas (datar 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. Dapat dieksekusi
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. Output
Before BUILDALL
After BUILDALL
Before abc
In abc: 1:2
After abc
4. Sumber