Perl6 拆分函数向数组添加额外元素
Perl6 split function adding extra elements to array
my @r = split("", "hi");
say @r.elems;
--> output: 4
split
正在向数组添加两个额外的元素,一个在开头,另一个在结尾。
我必须在每次分割后进行 shift 和 pop 来纠正这个问题。
有没有更好的拆分字符串的方法?
如果您在空字符串上拆分,您将在返回列表的开头和结尾处得到一个空元素,因为在和之前也有一个空字符串在字符串之后。
你要的是.comb
不带参数,完全按功能写出来:
"hi".comb.elems.say; # 2
有关详细信息,请参阅 https://docs.raku.org/routine/comb#(Str)_routine_comb。
原因是当您使用空的 Str “”
作为分隔符时,它与您使用匹配字符旁边的正则表达式 /<|wb>/
相同。所以它也匹配第一个字符之前和最后一个字符之后。在这种情况下(并且仅在这种情况下),Perl 5 会为您删除这些“额外”字符串,这很可能是造成混淆的地方。
Perl 6 的作用是允许您显式 :skip-empty
值
'hi'.split('') :skip-empty
'hi'.split('', :skip-empty)
split("", "hi") :skip-empty
split("", "hi", :skip-empty)
或者指定你真正想要的
'hi'.comb( /./ )
'hi'.comb( 1 )
'hi'.comb
comb( /./, 'hi' )
comb( 1, 'hi' )
my @r = split("", "hi");
say @r.elems;
--> output: 4
split
正在向数组添加两个额外的元素,一个在开头,另一个在结尾。
我必须在每次分割后进行 shift 和 pop 来纠正这个问题。
有没有更好的拆分字符串的方法?
如果您在空字符串上拆分,您将在返回列表的开头和结尾处得到一个空元素,因为在和之前也有一个空字符串在字符串之后。
你要的是.comb
不带参数,完全按功能写出来:
"hi".comb.elems.say; # 2
有关详细信息,请参阅 https://docs.raku.org/routine/comb#(Str)_routine_comb。
原因是当您使用空的 Str “”
作为分隔符时,它与您使用匹配字符旁边的正则表达式 /<|wb>/
相同。所以它也匹配第一个字符之前和最后一个字符之后。在这种情况下(并且仅在这种情况下),Perl 5 会为您删除这些“额外”字符串,这很可能是造成混淆的地方。
Perl 6 的作用是允许您显式 :skip-empty
值
'hi'.split('') :skip-empty
'hi'.split('', :skip-empty)
split("", "hi") :skip-empty
split("", "hi", :skip-empty)
或者指定你真正想要的
'hi'.comb( /./ )
'hi'.comb( 1 )
'hi'.comb
comb( /./, 'hi' )
comb( 1, 'hi' )