在 Cool 中§
请参阅主要文档 in context 以了解方法 contains
method contains(Cool: |c)
将调用者强制转换为 Str,并调用 Str.contains。有关参数和一般语法,请参阅该版本的 method。
say 123.contains("2")# OUTPUT: «True»
由于 Int 是 Cool 的子类,因此 123 被强制转换为 Str,然后调用 contains。
say (1,1, * + * … * > 250).contains(233)# OUTPUT: «True»
Seq 也是 Cool 的子类,它们被字符串化为逗号分隔的形式。在这种情况下,我们还使用了一个 Int,它也将被字符串化;"233" 包含在该序列中,因此它返回 True。请注意,此序列不是惰性的;出于明显的原因,惰性序列的字符串化不包括其每个组件。
在 Str 中§
请参阅主要文档 in context 以了解方法 contains
multi method contains(Str: Cool , :i(:), :m(:) --> Bool)multi method contains(Str: Str , :i(:), :m(:) --> Bool)multi method contains(Str: Regex --> Bool)multi method contains(Str: Cool , Int(Cool) , :i(:), :m(:) --> Bool)multi method contains(Str: Str , Int , :i(:), :m(:) --> Bool)multi method contains(Str: Regex , Int --> Bool)multi method contains(Str: Regex , Cool --> Bool)
给定一个 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 /); # OUTPUT: «True»say 'Hello, World'.contains(/\w /, 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»
请注意,由于 List 或 Array 被 强制 转换为 Str 的方式,结果有时可能会令人惊讶。
say <Hello, World>.contains('Hello'); # OUTPUT: «True»say <Hello, World>.contains('Hello', 0); # OUTPUT: «True»say <Hello, World>.contains('Hello', 1); # OUTPUT: «False»
请参阅 陷阱。