:DはPerl 6でどういう意味ですか

1444 ワード

裸:D、:U、:Tまたは:は、既定のタイプが定義、未定義、タイプオブジェクト、または任意のオブジェクトであることを制限するタイプコンストレイントです.だから
  class Con {
      method man(:U: :D $x)
  }
  

その署名は(Con:U: Any:D $x)に等しい.
Con:Uは呼び出し者で、呼び出し者の後ろにコロンをつけます.明示的な呼び出し元をマークするには、その後ろにコロンを付けるといいです.
method doit ($x: $a, $b, $c) { ... }

Abstract vs Concrete types
名前のあるタイプの場合、他のサブセットタイプの中には、タイプの名前の後に適切な状語を追加することによって自動的に派生するものもあります.
    Int:_                Int  
    Int:D              (   )Int  
    Int:U              (     )Int  
    Int:T         Int       


つまり、それらの意味は少し似ています.

    Int:D       Int:_ where DEFINITE($_)
    Int:U       Int:_ where not(DEFINITE($_))
    Int:T       Int:U where none(Failure)

where DEFINITEは、処理中のオブジェクトに合法的な強制表現があるかどうかを示すブールマクロです.(以下の自省を参照).
Perl 6では、Intは通常、呼び出し者を除いてInt:_を意味すると仮定し、デフォルトはInt:Dである.(デフォルトのnewメソッドには、呼び出し元が:Tであるプロトタイプがあるので、すべてのnewメソッドはデフォルトでタイプオブジェクトを許可します.)
これらのデフォルトは、様々なコンパイル命令によって文法の役割ドメインで変更できます.

    use parameters :D;



非呼び出し者のパラメータは:Dとデフォルト設定されます.
対比として、

   use variables :D;


変数宣言に使用されるタイプについても同じことをします.このような文法的役割ドメインでは、:_の形式で標準的な動作に戻ることができます.特に、呼び出し元はデフォルトで定義されているため、

    use invocant :_;


呼び出し元は、定義された呼び出し元と定義されていない呼び出し元のいずれかのタイプを許可します.