如何在Perl6中实现带有可选标志的函数?例如,假设我想调用我的函数:
format 'a b c';
或者像这样:
format :pretty 'a b c';
我该怎么做?感谢
答案 0 :(得分:11)
它只是一个命名参数,如果标志是布尔值。这一切都有效,因为: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';
答案 1 :(得分: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")»