如何实现在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")»