Perl6可选函数标志

时间:2016-08-04 09:12:01

标签: perl6

如何在Perl6中实现带有可选标志的函数?例如,假设我想调用我的函数:

format 'a b c';

或者像这样:

format :pretty 'a b c';

我该怎么做?感谢

2 个答案:

答案 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")␤»