Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Наречия за индексиране 🆕 | Тест — Наречия за индексиране →
💪 Или преминете направо към упражненията в този
раздел.