Курс по Raku / Напреднали / Контейнери / Контексти 🆕

Числов, низов и булев контекст

Три много често срещани контекста изискват стойността да се държи като число, низ или булева стойност. Всеки от тях има префиксен оператор, който го налага изрично:

  • + — числов контекст
  • ~ — низов контекст
  • ? — булев контекст

Приложени към масив, те дават неговата дължина, елементите му, обединени с интервали, и дали съдържа елементи:

my @a = 1, 2, 3;

say +@a; # 3
say ~@a; # 1 2 3
say ?@a; # True

Празен масив е 0 в числов контекст и False в булев контекст:

my @empty;
say +@empty; # 0
say ?@empty; # False

Не е необходимо винаги да изписвате тези оператори ръчно, защото езикът може да наложи правилния контекст вместо вас. Аритметиката поставя операндите си в числов контекст, конкатенацията ги поставя в низов контекст, а if, while и and/or поставят условието си в булев контекст:

my @a = 1, 2, 3;

say 10 + @a;              # 13, here @a is its length: 3
say 'items: ' ~ @a;       # items: 1 2 3
if @a { say 'not empty' } # not empty

Така if @array { … } работи точно както бихте очаквали: непразен масив е истина. Префиксните оператори са явният начин да поискате същите преобразувания.

В комбинация с постфиксен if, това позволява да се създаде наистина изразителен код:

say "{+@a} items are there" if @a; # 3 items are there

Практика

Направете 1 тест върху съдържанието на тази тема.

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

Контексти 🆕   |   Тест — Контексти


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