在 Cool 中§

请参阅主要文档 in context 以了解方法 contains

method contains(Cool:D: |c)

将调用者强制转换为 Str,并调用 Str.contains。有关参数和一般语法,请参阅该版本的 method。

say 123.contains("2")# OUTPUT: «True␤»

由于 IntCool 的子类,因此 123 被强制转换为 Str,然后调用 contains

say (1,1* + * … * > 250).contains(233)# OUTPUT: «True␤»

Seq 也是 Cool 的子类,它们被字符串化为逗号分隔的形式。在这种情况下,我们还使用了一个 Int,它也将被字符串化;"233" 包含在该序列中,因此它返回 True。请注意,此序列不是惰性的;出于明显的原因,惰性序列的字符串化不包括其每个组件。

在 Str 中§

请参阅主要文档 in context 以了解方法 contains

multi method contains(Str:D: Cool:D $needle:i(:$ignorecase), :m(:$ignoremark--> Bool:D)
multi method contains(Str:D: Str:D $needle:i(:$ignorecase), :m(:$ignoremark--> Bool:D)
multi method contains(Str:D: Regex:D $needle --> Bool:D)
multi method contains(Str:D: Cool:D $needleInt(Cool:D$pos:i(:$ignorecase), :m(:$ignoremark--> Bool:D)
multi method contains(Str:D: Str:D $needleInt:D $pos:i(:$ignorecase), :m(:$ignoremark--> Bool:D)
multi method contains(Str:D: Regex:D $needleInt:D $pos --> Bool:D)
multi method contains(Str:D: Regex:D $needleCool:D $pos --> Bool:D)

给定一个 Str 调用者(称为haystack)和一个第一个参数(称为 $needle),它从字符串的开头在 haystack 中搜索 $needle,如果找到 $needle,则返回 True。如果提供了可选参数 $pos,则 contains 将从字符串中的 $pos 字符开始搜索 haystack

say "Hello, World".contains('Hello');      # OUTPUT: «True␤» 
say "Hello, World".contains('hello');      # OUTPUT: «False␤» 
say "Hello, World".contains('Hello'1);   # OUTPUT: «False␤» 
say "Hello, World".contains(',');          # OUTPUT: «True␤» 
say "Hello, World".contains(','3);       # OUTPUT: «True␤» 
say "Hello, World".contains(','10);      # OUTPUT: «False␤»

在第一种情况下,contains 从调用者字符串的开头就在调用者上搜索 'Hello' 字符串,并返回 True。在第三种情况下,没有找到 'Hello' 字符串,因为我们已经从 'Hello, World' 中的第二个位置(索引 1)开始查找。

自 Rakudo 2020.02 版本以来,$needle 还可以是一个 Regex,在这种情况下,contains 方法会快速返回 regex 是否至少匹配字符串一次。没有创建 Match 对象,因此相对较快。

say 'Hello, World'.contains(/\w <?before ','>/);    # OUTPUT: «True␤» 
say 'Hello, World'.contains(/\w <?before ','>/5); # OUTPUT: «False␤»

自 Rakudo 2020.02 版本以来,如果指定了可选命名参数 :ignorecase:i,则对 $needle 的搜索将忽略大小写字母之间的区别。

say "Hello, World".contains("world");              # OUTPUT: «False␤» 
say "Hello, World".contains("world":ignorecase); # OUTPUT: «True␤»

自 Rakudo 2020.02 版本以来,如果指定了可选命名参数 :ignoremark:m,则对 $needle 的搜索只考虑基本字符,而忽略附加标记,如组合重音符号。

say "abc".contains("ä");               # OUTPUT: «False␤» 
say "abc".contains("ä":ignoremark);  # OUTPUT: «True␤»

请注意,由于 ListArray强制 转换为 Str 的方式,结果有时可能会令人惊讶。

say <Hello, World>.contains('Hello');    # OUTPUT: «True␤» 
say <Hello, World>.contains('Hello'0); # OUTPUT: «True␤» 
say <Hello, World>.contains('Hello'1); # OUTPUT: «False␤»

请参阅 陷阱