【问题标题】:How can I return context sensitive return values in Perl 6?如何在 Perl 6 中返回上下文相关的返回值?
【发布时间】:2010-10-18 20:02:02
【问题描述】:

在Perl 5和Perl 6之间对differences的总结中,注意到wantarray函数不见了:

wantarray() 不见了

wantarray 不见了。在 Perl 6 中,上下文 向外流动,这意味着一个 例程不知道它在哪个上下文中 在里面。

相反,您应该返回符合以下条件的对象 在各种情况下做正确的事。

有人可以提供一个如何创建此类对象的示例吗?

【问题讨论】:

    标签: raku perl


    【解决方案1】:

    我认为 2 个例子可能是:


    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 开始用通用的“want”替换“wantarray”:RFC 98 (v1) context-based method overloading, circa 2000,也在http://dev.perl.org/perl6/rfc/21.html。我不确定为什么/何时进行更改。

    【讨论】:

      【解决方案2】:

      Reddit 上的这个 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';
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-08
        • 2019-01-09
        • 2022-08-18
        • 2012-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多