-1। सीमाएँ (केवल संकुल के लिए)
विधि एक्सपोर्टर कॉल को .set_how करंट पर $?LANG
एक स्लैंग को बाद में जोड़ता है।
फिर यह add_package_declarator है MAIN
$?LANG
जो package_declarator
इसके कार्य और व्याकरण में एक विधि जोड़ता है । यह है, मुझे लगता है, केवल "गतिशील कठबोली" (World.nqp में)।
यदि आप चाहते हैं, तो रुटीन_डेकलर को अधिलेखित करना है । फिर आपको सिर्फ़ उद्धृत की गई श्रृंखला की नकल करते हुए एक स्लैंग लिखना होगा। यदि आप विधि कीवर्ड रखना और कक्षा में स्वचालित हस्ताक्षर बनाना स्वीकार करते हैं, तो विधि के नाम के अनुसार कहें, यहाँ एक तरीका है:
ध्यान दें: एक पैकेज एक कंटेनर (पैकेज, व्याकरण, मॉड्यूल, भूमिका, पता, Enum, वर्ग, सबसेट) है। यदि आप एक विधि की तरह अंदर कोड डालते हैं, तो यह निष्पादित हो जाता है (मैं सिर्फ कोशिश करूँगा):
0. विवरण (एक्सपोर्ट)
मैं undocumented EXPORTHOW और DECLARE
एक मॉड्यूल में उपयोग करूंगा क्योंकि मुझे Phaser के साथ कोई रास्ता नहीं मिला । जाहिरा तौर पर यह BEGIN में बहुत देर हो चुकी है।
मैं जो उदाहरण देता हूं, वह प्रत्येक विधि को एक कक्षा में (यहां तक कि BUILDALL
) सजा रहा है ।
1. लिब ( 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. सूत्र