-1। সীমাবদ্ধতা (কেবল প্যাকেজগুলির জন্য)
পদ্ধতি EXPORTHOW কল .set_how বর্তমান উপর $?LANGআধুনিক করার জন্য একটি অপভাষা যোগ।
তারপর এটি add_package_declarator করতে MAIN $?LANGযা যোগ করা package_declaratorএর কার্যকলাপের এবং ব্যাকরণ থেকে পদ্ধতি। এটি, আমি মনে করি, এটি একমাত্র "গতিশীল স্ল্যাং" (ওয়ার্ল্ড.এনকিপিতে)।
আপনি যা চান তা হল রুটিন_ডেক্লেটর ওভাররাইট । তারপরে আপনাকে কেবল উদ্ধৃত শৃঙ্খলা অনুকরণ করে একটি গালি লিখতে হবে। আপনি যদি ক্লাসে মেথড কীওয়ার্ডটি রাখতে এবং স্বয়ংক্রিয় স্বাক্ষর করতে স্বীকার করেন তবে পদ্ধতির নাম অনুসারে বলুন, এখানে একটি উপায় রয়েছে:
দ্রষ্টব্য: একটি প্যাকেজ হল একটি ধারক (প্যাকেজ, ব্যাকরণ, মডিউল, ভূমিকা, জ্ঞান, এনুম, শ্রেণি, উপসেট)। যদি আপনি কোনও পদ্ধতির মতো কোডটি ভিতরে রাখেন তবে এটি কার্যকর হয়ে যায় (আমি চেষ্টা করেছি):
0. বর্ণনা (রফতানি)
আমি অনথিভুক্ত ব্যবহার করেন EXPORTHOW এবং DECLAREএকটি মডিউল কারণ আমি সঙ্গে একটি উপায় খুঁজে বের করা হয়নি Phaser । স্পষ্টতই এটি অনেকটা দেরি হয়ে গেছে এমনকি বিগিনেও।
আমি যে উদাহরণ দিচ্ছি তা হ'ল একটি পদ্ধতিতে (এমনকি 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. সূত্র