如何實現在Perl6中採用可選標誌的函數?例如,說我想引用我的功能是這樣的:Perl6可選功能標誌
format 'a b c';
或像這樣:
format :pretty 'a b c';
我怎樣才能做到這一點?謝謝
如何實現在Perl6中採用可選標誌的函數?例如,說我想引用我的功能是這樣的: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
,但它可以說是'正確的做'的語義),在第二個中,我們通過添加!
使其成爲必需的參數。
還要注意的是命名參數還是必須用逗號隔開,即你使用它作爲
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")»