代码之家  ›  专栏  ›  技术社区  ›  Eric Strom

如何在Perl6中返回上下文相关的返回值?

  •  13
  • Eric Strom  · 技术社区  · 14 年前

    differences 在Perl5和Perl6之间,注意到 wantarray

    wantarray()不见了

    万塔雷走了。在Perl6中,上下文 向外流动,这意味着 例行程序不知道它在哪个上下文中

    相反,您应该返回 在任何情况下都要做正确的事情。

    有人能举例说明如何创建这样一个对象吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   DVK    14 年前

    我想有两个例子:


    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 . 我不知道为什么/什么时候做了改变。

        2
  •  3
  •   AndyG    7 年前

    这个 comment 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';
    }