在Perl 5和Perl 6之间differences的摘要中,注意到wantarray
函数已经消失:
wantarray()消失了
欲望阵线消失了。在Perl 6中,上下文 向外流动,这意味着一个 例程不知道它在哪个上下文中 是在。
相反,你应该返回那些对象 在每种情况下做正确的事。
有人可以举例说明如何创建这样的对象吗?
答案 0 :(得分:4)
我认为可能有两个例子:
http://perlcabal.org/syn/S13.html#Type_Casting
类可以定义允许它作为例程,数组或散列进行响应的方法。长形式如下:
method postcircumfix:<( )> ($capture) {...}
method postcircumfix:<[ ]> (**@slice) {...}
method postcircumfix:<{ }> (**@slice) {...}
这些有点笨拙,所以你也可以使用这些简短形式:
method &.( $capture ) {...}
method @.[ **@slice ] {...}
method %.{ **@slice } {...}
此外,我认为这可能是相关的,尽管不那么重要:http://perlcabal.org/syn/S12.html
搜索:
您可以编写自己的访问者来覆盖任何或所有自动生成的访问者。
因此,您返回一个具有多个特定于上下文的访问器的对象。
有趣的是,它首先使用Perl6将“wantarray”替换为通用的“want”:RFC 98 (v1) context-based method overloading, circa 2000,同样在http://dev.perl.org/perl6/rfc/21.html。我不确定为什么/何时做出改变。
答案 1 :(得分:3)
关于博文comment的关于Reddit的这个Immutable Sigils and Context给出了以下示例:
class GeoLocation is Array {
method Str { 'middle of nowhere' }
}
sub remote_location {
return GeoLocation.new(1e6 xx 3);
}
# or even easier:
sub remote_location {
return (1e6 xx 3) but 'middle of nowhere';
}