在 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»
请参阅 陷阱。