Курс по Raku / Напреднали / Подпрограми

Извикване с двоеточие 🆕

Когато извиквате метод или подпрограма, обикновено поставяте аргументите в скоби: @a.grep(* > 5). Raku предлага и втора форма — поставете двоеточие след името и всичко след двоеточието става списъкът с аргументи, без никакви скоби:

say (1..10).grep: * %% 2; # (2 4 6 8 10)

Двоеточието в grep: изпълнява същата роля като скобите: (1..10).grep: * %% 2 означава точно (1..10).grep(* %% 2). Двете форми са взаимозаменяеми:

say <a b c>.join('-'); # a-b-c
say <a b c>.join: '-'; # a-b-c

Формата с двоеточие е най-удобна при методи, които приемат блок или Whatever израз, защото премахва едно ниво на вложеност. Сравнете:

my @a = 3, 1, 2;

say @a.sort({ $^b <=> $^a }); # скоби около блока
say @a.sort: { $^b <=> $^a }; # двоеточие — няма затваряща скоба за съвпадение

И двете отпечатват (3 2 1), но версията с двоеточие се чете по-чисто, особено когато блокът е дълъг.

Това е братът на извикването без скоби, което вече използвате с оператори за списъци като say 1, 2, 3 — там say приема всичко след себе си като аргументи. Правилото, което трябва да запомните, е, че формата с двоеточие поглъща остатъка от израза като аргументи, затова трябва да стои в края на верига от извиквания. Ето защо ('a' .. 'z')».uc».ord.grep: 60 < * < 70 работи: grep е последното извикване и няма нищо за верижно извикване след него. Ако трябва да извиквате повече методи, използвайте формата със скоби или групирайте частите на целия израз, за да стане ясно:

say (('a' .. 'z')».uc».ord.grep: 60 < * < 70)».chr # (A B C D E)

Едно нещо, на което трябва да внимавате: не комбинирайте двоеточие и скоби като .grep:( … ). Този запис влиза в конфликт със синтаксиса за сигнатурен литерал :( … ) и не се разпознава. Използвайте или .grep( … ), или .grep: … — едното или другото, но не и двете.

Практика

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

Упражнения

Този раздел съдържа 3 упражнения. Разгледайте всички теми в раздела, преди да се захванете с практиката.

  1. Map с двоеточие
  2. Join с двоеточие
  3. Sort с двоеточие

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

Тест — Звездата Whatever   |   Map с двоеточие