在 Match 中§

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

method chars()

返回匹配字符串中的字符数,如果没有匹配则返回 0。

返回与 .Str.chars 相同的值。

在 Cool 中§

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

multi  chars(Cool $x)
multi  chars(Str:D $x)
multi  chars(str $x --> int)
method chars(--> Int:D)

将调用者(或以子例程形式,其参数)强制转换为 Str,并返回字符串中的字符数。请注意,在 JVM 上,您当前获得的是代码点而不是字素。

say 'møp'.chars;    # OUTPUT: «3␤» 
say 'ã̷̠̬̊'.chars;     # OUTPUT: «1␤» 
say '👨‍👩‍👧‍👦🏿'.chars;    # OUTPUT: «1␤»

如果字符串是本机的,则字符数也将作为本机 int 返回。

字素是用户可见的字符。也就是说,这是用户认为的“字符”。

字素可以包含多个代码点。通常情况下,当涉及到 PrependExtend 字符(也称为组合字符)时,字素和代码点的数量会有所不同,但还有许多其他情况下也可能发生这种情况。另一个例子是 \c[ZWJ]零宽连字)。

您可以检查字符的 Grapheme_Cluster_Break 属性,以了解它的行为方式。

say ã̷̠̬̊.uniprops(Grapheme_Cluster_Break); # OUTPUT: «(Other Extend Extend Extend Extend)␤» 
say 👨‍👩‍👧‍👦🏿.uniprops(Grapheme_Cluster_Break); # OUTPUT: «(E_Base_GAZ ZWJ E_Base_GAZ ZWJ E_Base_GAZ ZWJ E_Base_GAZ E_Modifier)␤»

您可以在Unicode 标准中阅读有关字素的更多信息,Raku 严格遵循该标准,使用一种称为NFG,标准化字素的方法来有效地表示它们。

在角色 Blob 中§

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

method chars(Blob:D:)

抛出 X::Buf::AsStr,其中 chars 作为有效负载。

在 Str 中§

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

multi        chars(Cool  $x --> Int:D)
multi        chars(Str:D $x --> Int:D)
multi        chars(str   $x --> int)
multi method chars(Str:D:   --> Int:D)

返回字符串中以字素表示的字符数。在 JVM 上,这当前会错误地返回代码点的数量。