Курс языка программирования Raku / Продвинутый уровень / Контейнеры / Наречия индексации
Существование и удаление
Наречие :exists превращает обращение по индексу в
вопрос: есть ли значение по данному ключу или индексу? Оно возвращает
булево значение, не извлекая сами данные:
my %h = apple => 1, pear => 2;
say %h<apple>:exists; # True
say %h<plum>:exists; # FalseЭто правильный способ проверить наличие ключа, потому что простое
чтение %h<plum> вернуло бы неопределённое значение
или, в зависимости от данных, скрыло бы разницу между «отсутствует» и
«присутствует, но не определён».
Наречие :delete удаляет запись и возвращает значение,
которое она содержала:
my %h = apple => 1, pear => 2;
say %h<apple>:delete; # 1
say %h.keys; # (pear)
say %h; # {pear => 2}Запись apple удалена, а удалённое значение
1 возвращается обратно, чтобы вы могли его
использовать.
Оба наречия работают и с массивами — по индексу:
my @a = 10, 20, 30;
say @a[1]:exists; # True
say @a[5]:exists; # False
say @a[1]:delete; # 20
say @a[1]:exists; # FalseЕсли вам интересно, как будет выглядеть массив после удаления элемента из середины, вот ответ:
say @a; # [10 (Any) 30]Таким образом, единая согласованная нотация позволяет запрашивать и изменять контейнеры на месте, не прибегая к отдельным методам.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Наречия индексации | Тест — Наречия индексации →
💪 Или перейдите сразу к упражнениям этого
раздела.