【问题标题】:More concise way to setup defaults for regex in perl6在 perl6 中为正则表达式设置默认值的更简洁的方法
【发布时间】:2018-04-05 21:22:42
【问题描述】:

拆分例如mins-2 到单位名称和顺序的组成部分,这就是我想要的

sub split-order ( $string ) {
    my Str $i-s = '1';
    $string ~~ / ( <-[\-\d]>+ ) ( \-?\d? ) /;
    $i-s = "$1" if $1 ne '';
    return( "$0", +"$i-s".Int );
}

似乎 perl6 应该能够将其打包成更简洁的措辞。我需要默认顺序为 1,其中没有尾随数字。

我可能有点懒惰,没有将行尾与 $ 匹配。尽量避免返回 Nil,因为这对调用者没有用。

谁有更好的措辞?

【问题讨论】:

    标签: raku


    【解决方案1】:

    用好旧的split怎么样?

    use v6;
    
    sub split-order(Str:D $in) {
        my ($name, $qty) = $in.split(/ '-' || <?before \d>/, 2);
        return ($name, +($qty || 1));
    }
    
    say split-order('mins-2');  # (mins 2)
    say split-order('foo42');   # (foo 42)
    say split-order('bar');     # (bar 1)
    

    【讨论】:

      【解决方案2】:

      这不会完全重现您的算法(特别是不会产生负数),但我怀疑它更接近您实际想要实现的目标:

      sub split-order($_) {
          /^ (.*?) [\-(\d+)]? $/;
          (~$0, +($1 // 1));
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-15
        • 2012-11-10
        • 1970-01-01
        • 2016-07-05
        • 2013-10-15
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多