Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Наречия за индексиране 🆕   |   Тест — Наречия за индексиране


💪 Или преминете направо към упражненията в този раздел.