在 Cool 中§

有关例程 comb,请参阅上下文中的主要文档

multi        comb(Regex $matcherCool $input$limit = *)
multi        comb(Str $matcherCool $input$limit = *)
multi        comb(Int:D $sizeCool $input$limit = *)
multi method comb(|c)

返回一个Seq,其中包含调用者(方法形式)或第二个参数(子形式)与Regex、字符串或已定义数字匹配的所有(或如果提供,最多$limit)匹配项。

say "6 or 12".comb(/\d+/).join("");           # OUTPUT: «6, 12␤» 
say comb(/\d <[1..9]> /,(11..30)).join("--");
# OUTPUT: 
# «11--12--13--14--15--16--17--18--19--21--22--23--24--25--26--27--28--29␤»

第二个语句举例说明了comb的第一种形式,其中Regex排除了十的倍数,而Range(即Cool)作为$inputcomb在对结果字符串应用.comb之前将Range字符串化。查看Str.comb以了解其对不同类型的输入字符串的影响。当第一个参数是整数时,它表示将输入划分的块的(最大)大小

say comb(3,[3,33,333,3333]).join("*");  # OUTPUT: «3 3*3 3*33 *333*3␤»

在这种情况下,输入是一个列表,在转换为Str(包括空格)后,它被划分为大小为 3 的块。

在 Allomorph 中§

有关方法 comb,请参阅上下文中的主要文档

method comb(Allomorph:D: |c)

对调用者的Str值调用Str.comb

在 IO::CatHandle 中§

有关方法 comb,请参阅上下文中的主要文档

method comb(IO::CatHandle:D: |args --> Seq:D)

读取句柄并处理其内容的方式与Str.comb相同,采用相同的参数。在调用此方法时,实现可能会完全吸收所有源句柄的内容

(my $f1 = 'foo'.IO).spurt: 'foo';
(my $f2 = 'bar'.IO).spurt: 'bar';
IO::CatHandle.new($f1$f2).comb(2).raku.say;
# OUTPUT: «("fo", "ob", "ar").Seq␤» 

在 IO::Handle 中§

有关方法 comb,请参阅上下文中的主要文档

method comb(IO::Handle:D: Bool :$close|args --> Seq:D)

读取句柄并处理其内容的方式与Str.comb相同,采用相同的参数,如果将$close设置为真值,则在完成后关闭句柄。在调用此方法时,实现可能会完全吸收文件。

当句柄处于二进制模式时尝试调用此方法将导致抛出X::IO::BinaryMode异常。

my $fh = 'path/to/file'.IO.open;
say "The file has {+$fh.comb: '':close} ♥s in it";

在 IO::Path 中§

有关方法 comb,请参阅上下文中的主要文档

method comb(IO::Path:D: |args --> Seq:D)

打开文件并处理其内容的方式与Str.comb相同,采用相同的参数。在调用此方法时,实现可能会完全吸收文件。

在 Str 中§

有关例程 comb,请参阅上下文中的主要文档

multi        comb(Str:D   $matcherStr:D $input$limit = Inf)
multi        comb(Regex:D $matcherStr:D $input$limit = InfBool :$match)
multi        comb(Int:D $sizeStr:D $input$limit = Inf)
multi method comb(Str:D $input:)
multi method comb(Str:D $input: Str:D   $matcher$limit = Inf)
multi method comb(Str:D $input: Regex:D $matcher$limit = InfBool :$match)
multi method comb(Str:D $input: Int:D $size$limit = Inf)

$input中搜索$matcher,并返回一个Seq,其中包含不重叠的匹配项,最多限制为$limit个匹配项。

如果 $matcher 是一个正则表达式,每个 Match 对象都会被转换为一个 Str,除非设置了 $match(在 Rakudo 编译器的 2020.01 版本中可用)。

如果没有提供匹配器,则会返回字符串中字符的 Seq,就像匹配器是 rx/./ 一样。

示例

say "abc".comb.raku;                 # OUTPUT: «("a", "b", "c").Seq␤» 
say "abc".comb(:match).raku;         # OUTPUT: «(「a」 「b」 「c」)␤» 
say 'abcdefghijk'.comb(3).raku;      # OUTPUT: «("abc", "def", "ghi", "jk").Seq␤» 
say 'abcdefghijk'.comb(32).raku;   # OUTPUT: «("abc", "def").Seq␤» 
say comb(/\w/"a;b;c").raku;        # OUTPUT: «("a", "b", "c").Seq␤» 
say comb(/\N/"a;b;c").raku;        # OUTPUT: «("a", ";", "b", ";", "c").Seq␤» 
say comb(/\w/"a;b;c"2).raku;     # OUTPUT: «("a", "b").Seq␤» 
say comb(/\w\;\w/"a;b;c"2).raku# OUTPUT: «("a;b",).Seq␤» 
say comb(/.<(.)>/"<>[]()").raku;   # OUTPUT: «(">", "]", ")").Seq␤»

如果匹配器是一个整数,则 comb 的行为就像匹配器是 rx/ . ** {1..$matcher} /,但经过优化,速度更快。

请注意,正则表达式匹配器可以使用显式设置顶级捕获的功能来控制返回匹配文本的哪一部分。

multi        comb(Pair:D $rotorStr:D $input$limit = InfBool :$partial)
multi method comb(Str:D $input: Pair:D $rotor$limit = InfBool :$partial)

从 6.e 语言版本开始可用(Rakudo 编译器 2022.12+ 中存在早期实现)。rotor 对指示要作为键获取的字符数(“大小”)以及之后要向前采取的“步数”。其主要预期用途是提供一种从字符串中以有效方式创建 N-gram 的方法。默认情况下,只生成指定大小的字符串。可以通过使用真值指定命名参数 :partial 来覆盖此设置。

示例

say "abcde".comb(3 => -2);             # OUTPUT: «(abc bcd cde)␤» 
say "abcde".comb(3 => -2:partial);   # OUTPUT: «(abc bcd cde de e)␤» 
say "abcdefg".comb(3 => -22);        # OUTPUT: «(abc bcd)␤» 
say comb(3 => -2"abcde");            # OUTPUT: «(abc bcd cde)␤» 
say comb(5 => -2"abcde":partial);  # OUTPUT: «(abc bcd cde de e)␤» 
say comb(5 => -2"abcdefg"2);       # OUTPUT: «(abc bcd)␤»