.chars
の私の理解は"the number of characters in the string in graphemes"を返すということです。 .ords
の私の理解は、それが"a list of codepoint numbers, one for the base character of each grapheme in the string"を返すということです。つまり、.chars
は書記素数を返し、.ords
は書体ごとに1つのコードポイント(基数)を返します。しかし、私はMoarVM 2016.07にRakudo 2016年7月1日で見てい動作がそれと一致していないようです:.ordsは.charsに同意しないのはなぜですか?
> "\x[2764]\x[fe0e]".chars
1
> "\x[2764]\x[fe0e]".ords.fmt("U+%04x")
U+2764 U+fe0e
> "e\x[301]".ords.fmt("U+%04x")
U+00e9
> "0\x[301]".ords.fmt("U+%04x")
U+0030
.chars
方法はHEAVY BLACK HEARTとVARIATION SELECTOR-15のための期待1(テキスト表現を返します。 ❤︎ではなくemoji❤️、U + 2764 U + fe0f)、.ords
は、ベースではなく両方のコードポイントを返します(私はちょうどU + 2764を期待していました)。もっと紛らわしいことに、LATIN SMALL LETTER EとACUTE ACCENTとの組み合わせで.ords
と呼ぶと、U + 00e9(ラテン小文字のEを急に)に戻ります。私はLATIN SMALL LETTER Eがベースコードポイントであるため、U + 0065を期待していました。文字列のNFCバージョンがない場合(例えば、0の場合はU + 0030)、期待される結果を返す。
.chars
と.ords
の私の理解はちょうど間違っていますか、これはバグですか?
バグのようです。 – nwellnhof