在 perl6 中设置正则表达式默认值的更简洁的方法
More concise way to setup defaults for regex in perl6
拆分,例如mins-2 到单位名称和顺序的组成部分,这就是我想要的
sub split-order ( $string ) {
my Str $i-s = '1';
$string ~~ / ( <-[\-\d]>+ ) ( \-?\d? ) /;
$i-s = "" if ne '';
return( "[=10=]", +"$i-s".Int );
}
看来 perl6 应该能够将其打包成更简洁的措辞。我需要没有尾随数字的默认顺序 1。
我可能有点懒,没有匹配以 $ 结尾的行。尽量避免返回 Nil,因为这对调用者没有用。
谁有更好的措辞?
这并不能完全重现您的算法(尤其是不会产生负数),但我怀疑它更接近您实际想要实现的目标:
sub split-order($_) {
/^ (.*?) [\-(\d+)]? $/;
(~[=10=], +( // 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)
拆分,例如mins-2 到单位名称和顺序的组成部分,这就是我想要的
sub split-order ( $string ) {
my Str $i-s = '1';
$string ~~ / ( <-[\-\d]>+ ) ( \-?\d? ) /;
$i-s = "" if ne '';
return( "[=10=]", +"$i-s".Int );
}
看来 perl6 应该能够将其打包成更简洁的措辞。我需要没有尾随数字的默认顺序 1。
我可能有点懒,没有匹配以 $ 结尾的行。尽量避免返回 Nil,因为这对调用者没有用。
谁有更好的措辞?
这并不能完全重现您的算法(尤其是不会产生负数),但我怀疑它更接近您实际想要实现的目标:
sub split-order($_) {
/^ (.*?) [\-(\d+)]? $/;
(~[=10=], +( // 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)