在 Cool 中§
有关方法 words,请参阅 上下文中的主要文档
method words(Cool: |c)
将调用者(或第一个参数,如果作为子例程调用)强制转换为 Str
,并返回组成该字符串的单词列表。检查 Str.words
以获取其他参数及其含义。
say <The quick brown fox>.words.join('|'); # OUTPUT: «The|quick|brown|fox»say <The quick brown fox>.words(2).join('|'); # OUTPUT: «The|quick»
Cool
是许多其他类的基类,其中一些类(如 Match
)可以转换为字符串。这就是在这种情况下发生的事情
say ( "easy come, easy goes" ~~ m:g/(ea\w+)/).words(Inf);# OUTPUT: «(easy easy)»say words( "easy come, easy goes" ~~ m:g/(ea\w+)/ , ∞);# OUTPUT: «(easy easy)»
上面的示例说明了调用 words
的两种方式,其中第一个参数通过其签名转换为调用者。Inf
是第二个参数的默认值,因此在两种情况下(和形式)都可以简单地省略它。
只有空白(包括不换行空格)才算作单词边界
say <Flying on a Boeing 747>.words.join('|'); # OUTPUT: «Flying|on|a|Boeing|747»
在这种情况下,“Boeing 747”包含一个(仅在源代码中可见)不换行空格;words
仍然在它上面分割(结果)Str
,即使原始数组只有 4 个元素也是如此
say <Flying on a Boeing 747>.join('|'); # OUTPUT: «Flying|on|a|Boeing 747»
有关更多示例和调用方式,请参阅 Str.words
。
在 Supply 中§
有关方法 words,请参阅 上下文中的主要文档
method words(Supply: --> Supply)
创建一个供应,它将逐字逐句地发出来自通常由某些异步 I/O 操作创建的供应的字符。
my = Supply.from-list("Hello Word!".comb);my = .words;.tap(); # OUTPUT: «HelloWord!»
在 IO::CatHandle 中§
有关方法 words,请参阅 上下文中的主要文档
method words(IO::CatHandle: = Inf, : --> Seq)
与 IO::Handle.words
相同(包括有关读取比生成一定数量的单词所需更多数据的警告)。请注意,源句柄之间的边界被视为单词边界。
(my = 'foo'.IO).spurt: 'foo bar';(my = 'bar'.IO).spurt: 'meow';IO::CatHandle.new(, ).words.raku.say;# OUTPUT: «("foo", "bar", "meow").Seq»
注意:如果 :$close
为 False
,则完全消耗的句柄仍然会关闭。
在 IO::Handle 中§
有关例程 words,请参阅 上下文中的主要文档
multi words(IO::Handle = , = Inf, : --> Seq)multi method words(IO::Handle: = Inf, : --> Seq)
类似于 Str.words
,将句柄的流分隔为连续的空白块(如 Unicode 定义)并返回结果“单词”的 Seq
。采用可选的 $limit
参数,该参数可以是非负 Int
、Inf
或 Whatever
(解释为 Inf
),以指示仅必须返回最多 $limit
个单词。如果 Bool
命名参数 :$close
设置为 True
,则在返回的 Seq
耗尽时自动关闭句柄。如果没有提供句柄,则子例程形式默认为 $*ARGFILES
。
当句柄处于 二进制模式 时,尝试调用此方法将导致 X::IO::BinaryMode
异常被抛出。
my := bag .words;say "Most common words: ", .sort(-*.value).head: 5;
注意:在调用 .words
时,实现可能会读取比必要更多的 data。也就是说,$handle.words(2)
可能会读取多于两个“单词”的 data,并且对读取方法的后续调用可能无法从获取的两个单词之后的正确位置读取。在调用 .words
之后,文件位置应视为未定义。
在 IO::Path 中§
请参阅 上下文中的主要文档 以了解方法 words
method words(IO::Path: : = True, : = 'utf8', : = ["\x0A", "\r\n"], |c --> Seq)
打开调用者并返回其 words。
该行为等同于 打开 调用者指定的 file,将 :$chomp
、:$enc
和 :$nl-in
参数转发到 IO::Handle.open
,然后在该句柄上调用 IO::Handle.words
,将任何剩余参数转发到该方法,并返回结果 Seq
。
注意:words 是延迟读取的。在返回的 Seq
完全具体化 之前,底层使用的句柄不会关闭,这可能会导致泄漏打开的文件句柄。可以使用 $limit
参数 来避免泄漏打开的文件句柄,以减少要生成的单词 Seq
。
my := bag 'my-file.txt'.IO.words;say "Most common words: ", .sort(-*.value).head: 5;
在 Str 中§
请参阅 上下文中的主要文档 以了解例程 words
multi method words(Str: )multi method words(Str:)
返回非空白位列表,即与调用 $input.comb( / \S+ /, $limit )
相同。
示例
say "a\nb\n".words.raku; # OUTPUT: «("a", "b").Seq»say "hello world".words.raku; # OUTPUT: «("hello", "world").Seq»say "foo:bar".words.raku; # OUTPUT: «("foo:bar",).Seq»say "foo:bar\tbaz".words.raku; # OUTPUT: «("foo:bar", "baz").Seq»
它还可以用作子例程,将第一个参数变成调用者。$limit
是可选的,但如果提供了(且不等于 Inf
),它将仅返回前 $limit
个单词。
say words("I will be very brief here", 2); # OUTPUT: «(I will)»