-1 ข้อ จำกัด (เฉพาะสำหรับแพ็คเกจ)
วิธีการส่งออกEXPORTHOW .set_howในปัจจุบัน$?LANG
เพิ่มคำสแลงไปที่หลัง
จากนั้นก็จะadd_package_declaratorไปMAIN
$?LANG
ซึ่งจะเพิ่มpackage_declarator
วิธีการในการดำเนินการและไวยากรณ์ของมัน ฉันคิดว่ามันเป็น "ไดนามิกสแลง" เพียงอย่างเดียว (ใน World.nqp)
หากสิ่งที่คุณต้องการคือการเขียนทับroutine_declarator จากนั้นคุณต้องเขียนคำสแลงเลียนแบบห่วงโซ่ที่อ้างถึง หากคุณยอมรับที่จะเก็บคีย์เวิร์ดของเมธอดและสร้างลายเซ็นอัตโนมัติในคลาสให้พูดตามชื่อเมธอดนี่คือวิธี:
หมายเหตุ: แพ็กเกจคือคอนเทนเนอร์ (แพ็กเกจ, ไวยากรณ์, โมดูล, บทบาท, Knowhow, enum, คลาส, เซ็ตย่อย) หากคุณใส่โค้ดในรูปแบบวิธีการนี้จะถูกดำเนินการ (ฉันเพิ่งลอง):
0. คำอธิบาย (EXPORTHOW)
ผมจะใช้ที่ไม่มีเอกสารEXPORTHOWและDECLARE
ในโมดูลเพราะผมไม่ได้หาวิธีที่มีPhaser เห็นได้ชัดว่ามันสายเกินไปที่ BEGIN
ตัวอย่างที่ฉันให้คือการตกแต่งทุกวิธีในชั้นเรียน (คู่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. ปฏิบัติการ
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. เอาท์พุท
Before BUILDALL
After BUILDALL
Before abc
In abc: 1:2
After abc
4. แหล่งข้อมูล