Katakanlah saya menggunakan satu set boilerplate tertentu secara teratur:
class Foo {
method abc($a: $b, $c, +@d) is pure {
use Slang::Bar;
…
}
method xyz($a: $b, $c, +@d) is pure {
use Slang::Bar;
…
}
method blarg($a: $b, $c, +@d) is pure {
use Slang::Bar;
…
}
}
Saya lebih suka mengatakan:
class Foo is/does Bar {
bar abc { … }
bar xyz { … }
bar blarg { … }
}
Dan di suatu tempat di Bar, siapkan deklarasi untuk bar (atau, karena kelas Foo sendiri pada akhirnya akan menggunakan deklaratornya sendiri, ia bisa pergi ke tempat lain dan tidak harus ditarik dalam Tipe terpisah). Bagaimana saya bisa melakukan itu?
Jawaban:
-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 menambahkanpackage_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
)2. Dapat dieksekusi
3. Output
4. Sumber
for $_.HOW.method_table($_)
membuat hash baru menimpa cache metode dengan (nama baik)nqp::setmethcache
.sumber