2016-08-04 2 views

答えて

10

それはフラグの場合は、単に名前付き引数、ブール一つです。これはすべて:pretty:pretty(True)という対の構文的な砂糖であるためpretty => Trueです。

あなたはブール値

sub format($arg, Bool :$pretty = False) { 
    if $pretty { ... } 
    else { ... } 
} 

を使用するか、最初の例では、マルチディスパッチ

multi format($arg) { ... } 
multi format($arg, Bool :$pretty!) { ... } 

ためにその存在を使用するか、私たちは本当に必要のない(デフォルト値を提供しましたFalseに未定義の値boolifiesとして、それは間違いなく、我々はそれ!を追加することで、必要なパラメータからなる第二1で、意味的に)「を行うには正しいこと」です。

はまた、あなたが本当に奇妙な構文は、オペレーターといくつかのサブシグニチャの魔法を使用することができることをしたい場合は、

format :pretty, 'a b c'; 
3

としてそれを使用したい、つまり、名前付き引数はまだカンマで区切られていなければならないことに注意してください。 Boolメソッドはオプションで、クラスPrettyは空にすることができます。 MMDディスパッチャーが握るために何かを提供するだけです。

class Pretty { method Bool {True} }; 
sub prefix:<:pretty>(|c){ Pretty.new, c }; 
multi sub format((Pretty:D $pretty, |a)){ dd $pretty.Bool, a }; 
multi sub format(|c){ dd c }; 
format :pretty 'a b c'; format 'a b c'; 
# OUTPUT«Bool::True␤\(\("a b c"))␤\("a b c")␤» 
関連する問題