Почему .ords не согласуются с .chars?

Насколько я понимаю, .chars состоит в том, что он возвращает «количество символов в строке в графемах». Насколько я понимаю, .ords состоит в том, что он возвращает «список номеров кодовых точек, по одному для базового символа каждой графемы в строке» < / а>. То есть .chars возвращает количество графем, а .ords возвращает одну кодовую точку (основание) для каждой графемы. Однако поведение, которое я наблюдаю в Rakudo 2016.07.1 на MoarVM 2016.07, похоже, не соответствует этому:

> "\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 возвращает ожидаемое значение 1 для HEAVY BLACK HEART и VARIATION SELECTOR-15 (текстовое представление ❤︎ вместо эмодзи ❤️, U + 2764 U + fe0f), но затем .ords возвращает обе кодовые точки, а не только базу (я ожидал только U +2764). Еще больше сбивает с толку то, что если вы вызовете .ords на ЛАТИНСКОЙ СТРОЧНОЙ БУКВЕ E и СОЧЕТАЯ ОСТРЫЙ АКЦЕНТ, вы вернетесь U + 00e9 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА E С ОСТРЫМ). Я ожидал U + 0065, поскольку ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E является базовой кодовой точкой. Я получаю ожидаемый результат, когда нет версии строки NFC (например, U + 0030 для 0 ').

Я неправильно понимаю .chars и .ords или это ошибка?


person Chas. Owens    schedule 20.09.2016    source источник
comment
Похоже на ошибку.   -  person nwellnhof    schedule 21.09.2016


Ответы (1)


Ошибка документации относительно метода .ords. Один из основных разработчиков только что обновил документацию этим коммитом:

https://github.com/perl6/doc/commit/12ec5fc35e

Который должен появиться на сайте в ближайшее время.

person Coke    schedule 21.09.2016