如何在Perl 6中返回上下文敏感的返回值?

Eri*_*rom 13 perl perl6 perl5 raku

在Perl 5和Perl 6之间差异的总结中,注意到该wantarray功能已经消失:

wantarray()走了

wantarray走了.在Perl 6中,上下文向外流动,这意味着例程不知道它在哪个上下文中.

相反,你应该返回在每个上下文中做正确事情的对象.

有人可以举例说明如何创建这样的对象吗?

DVK*_*DVK 4

我认为两个例子可能是:


http://perlcabal.org/syn/S13.html#Type_Casting

类可以定义允许它像例程、数组或散列一样进行响应的方法。长形式如下:

method postcircumfix:<( )> ($capture) {...}
method postcircumfix:<[ ]> (**@slice) {...}
method postcircumfix:<{ }> (**@slice) {...}
Run Code Online (Sandbox Code Playgroud)

这些有点笨拙,所以您也可以使用这些简短的形式:

method &.( $capture ) {...}
method @.[ **@slice ] {...}
method %.{ **@slice } {...}
Run Code Online (Sandbox Code Playgroud)

另外,我认为这可能相关,但不太相关:http://perlcabal.org/syn/S12.html

搜索:

您可以编写自己的访问器来覆盖任何或所有自动生成的访问器。

因此,您返回一个具有多个特定于上下文的访问器的对象。


有趣的是,它开始于 Perl6 用通用的“want”替换“wantarray”:RFC 98 (v1) context-based method重载,大约 2000 年,也在http://dev.perl.org/perl6/rfc/21 .html。我不确定为什么/何时进行更改。