Perl 6の機能(特性)-シンボル付きメタデータ

機能(Traits)は、Perl 6のさまざまなタイプのオブジェクトにメタデータを添付する便利で拡張可能な方法です。渡された引数に応じて、関数によって返される値を自動的にキャッシュするキャッシュ機能の例を考えます。



#   ,    #  'is cached' multi sub trait_mod:<is>(Routine $r, :$cached!) { my %cache; #    ,  $r.wrap(-> $arg { #     %cache{$arg}:exists ?? %cache{$arg} # ...   ,     !! (%cache{$arg} = callwith($arg)) } ); } #  : sub fib($x) is cached { say("fib($x)"); $x <= 1 ?? 1 !! fib($x - 1) + fib($x - 2); } #     0  10      say fib(10);
      
      







特異点は動詞に適用されます。この場合は-です。 機能を処理する関数の名前で示されます。ここにtrait_modがあります。 ハンドラー引数は、機能が適用されるオブジェクト、および名前付き引数としての機能名(キャッシュ)です。



この例では、関数の.wrapメソッドが呼び出されますが、もちろん何でも呼び出すことができます。 これは通常、役割を関数に含めるか、役割を配布テーブルに追加するために使用されます。



機能は、関数だけでなく、パラメーター、属性、変数にも適用できます。 たとえば、書き込みアクセスを持つアクセサは、rw機能を介して実装されます。



  class Book { has @.pages is rw; ... }
      
      





また、機能を使用して、ドキュメントをクラスおよび属性に添付し、関数パラメーターを書き換え可能としてマークし、継承クラスを宣言し、それらにロールを適用します。



All Articles