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