-1. Hạn chế (chỉ dành cho gói)
Phương thức EXPORTHOW gọi .set_how trên hiện tại $?LANG
thêm một tiếng lóng vào sau.
Sau đó, nó add_package_declarator để MAIN
$?LANG
thêm package_declarator
phương thức vào Hành động và Ngữ pháp của nó. Theo tôi, đó là "tiếng lóng động" duy nhất (trong World.nqp).
Nếu những gì bạn muốn là ghi đè lên Rout_declarator . Sau đó, bạn phải viết một tiếng lóng bắt chước chuỗi vừa trích dẫn. Nếu bạn chấp nhận giữ từ khóa phương thức và tạo chữ ký tự động trong lớp, hãy nói theo tên phương thức, đây là một cách:
Lưu ý: Gói là một thùng chứa (gói, ngữ pháp, mô-đun, vai trò, bí quyết, enum, lớp, tập hợp con). Nếu bạn đặt mã bên trong giống như một phương thức, điều này sẽ được thực thi (Tôi vừa thử):
0. Mô tả (XUẤT KHẨU)
Tôi sẽ sử dụng EXPORTHOW không có giấy tờ và DECLARE
trong một mô-đun vì tôi không tìm thấy đường nào với Phaser . Rõ ràng là đã quá muộn ngay cả tại BEGIN.
Ví dụ tôi đưa ra, là trang trí mọi phương thức trong một lớp (chẵn BUILDALL
).
1. Thiên Bình ( 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. Thực thi
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. Đầu ra
Before BUILDALL
After BUILDALL
Before abc
In abc: 1:2
After abc
4. Nguồn