.chars
anlayışım "the number of characters in the string in graphemes" değerini döndürmesidir. Benim .ords
anlayışım "a list of codepoint numbers, one for the base character of each grapheme in the string" döndürmesidir. Yani, .chars
, grafik sayısı sayısını döndürür ve .ords
, grafik başına bir kod noktasını (taban) döndürür. Ancak, ben MoarVM 2.016,07 tarihinde Rakudo 2016/07/01 içinde görüyorum davranış eşleşecek şekilde görünmüyor:Neden .ords .chars ile aynı fikirde değil?
> "\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
yöntem AĞIR SİYAH KALP ve VARYASYONU SEÇİCİ-15 (metin gösterimi için 1 beklemek döndürür ❤︎ emoji ❤️ yerine, U + 2764 U + fe0f), ancak .ords
, yalnızca tabandan ziyade kod noktaları döndürür (sadece U + 2764 beklerim). Daha da kafa karıştırıcı, LATIN SMALL LETTER E ve COMBINING ACUTE ACCENT üzerinde .ords
'u çağırırsanız, U + 00e9'a geri dönersiniz (LATIN SMALL LETTER E ACUTE). U + 0065 LATIN KÜÇÜK MEKTUP E temel kod noktası olarak bekliyordum. Dizenin bir NFC sürümü olmadığında beklenen sonucu geri alırım (örneğin 0́ için U + 0030).
.chars
ve .ords
anlayışım kusurlu mu, yoksa bu bir hata mı?
Hata gibi görünüyor. – nwellnhof