?例えば、私はこのように私の機能を呼び出すようにしたいと言う: Perl6のオプション機能フラグIがPerl6のではオプションのフラグを取る関数を実装するにはどうすればよい
format 'a b c';
またはこのような
:format :pretty 'a b c';
私はこれをどのように行うことができますか?おかげ
?例えば、私はこのように私の機能を呼び出すようにしたいと言う: Perl6のオプション機能フラグIがPerl6のではオプションのフラグを取る関数を実装するにはどうすればよい
format 'a b c';
またはこのような
:format :pretty 'a b c';
私はこれをどのように行うことができますか?おかげ
それはフラグの場合は、単に名前付き引数、ブール一つです。これはすべて: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';
としてそれを使用したい、つまり、名前付き引数はまだカンマで区切られていなければならないことに注意してください。 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")»