2016-09-20 18 views
7

.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ı?

+0

Hata gibi görünüyor. – nwellnhof

cevap

İlgili konular