Курс Раку / Основи / Більше про функції
Зверніть увагу на пробіли
Використання функцій у Raku здебільшого інтуїтивне і не викликає проблем, але ви повинні бути попереджені про наступний аспект.
Коротко
Не додавайте пробіл між назвою функції та дужками з її аргументами. Але використовуйте пробіл після for
та if
.
Детально
Візьмемо просту функцію:
sub f($x, $y) {
return $x + $y;
}
Перш за все, зверніть увагу на відсутність пробілів між назвою функції та відкриваючими дужками, які містять параметри. Деякі стилі кодування в інших мовах можуть вимагати пробіл там. Raku це допускає, але це не практика, яку слід дотримуватися:
sub f ($x, $y) {
return $x + $y;
}
На стороні виклику відсутність пробілу є важливою. Якщо ви викликаєте функцію і опускаєте дужки, то пробіл після назви функції є неминучим:
f 5, 6;
Але якщо ви додаєте дужки, то не можна мати пробіл перед ними. Це правильний виклик:
f(5, 6);
А цей виклик неправильний:
f (5, 6);
Такий код викликає виняток:
Too few positionals passed; expected 2 arguments but got 1
sub f at t.raku line 1
in block <unit> at t.raku line 5
Raku бачить виклик з пробілом f (5, 6)
як спробу передати один аргумент (5, 6)
до функції. Ви можете легко перевірити тип цього аргументу, якщо перепишете функцію так, щоб вона приймала лише один аргумент:
sub f($param) {
say $param.WHAT;
}
f (5, 6); # (List)
Отже, виклик f (5, 6)
означає, що ми передаємо список до функції. Список як єдину сутність.
Коли потрібен пробіл
У деяких випадках пробіл необхідний. Це відбувається, коли ви використовуєте дужки з одним із ключових слів, таких як if
або for
або loop
. Наступний код неправильний:
if(True != False) {
say 'OK';
}
Повідомлення про помилку пояснює, що не так:
===SORRY!===
The word 'if' is interpreted as a 'if()' function call. Please use
whitespace instead of parentheses.
at /Users/ash/raku-course/t.raku:1
------> if⏏(True != False) {
Unexpected block in infix position (two terms in a row)
at /Users/ash/raku-course/t.raku:1
------> if(True != False)⏏ {
У випадку з if
, дужки взагалі не потрібні, тому проблема не виникає, якщо ви їх не використовуєте. Але в деяких випадках, як, наприклад, з loop
, вам потрібно мати їх, і пробіл стає обов’язковим:
loop(my $c = 0; $c != 10; $c++) { say $c }
У цьому коді відбувається те ж саме: loop(...)
розуміється компілятором як виклик функції. Додайте пробіл, щоб вирішити проблему. Або краще перепишіть фрагмент, використовуючи for
.
Висновок
Основна ідея: щоб уникнути таких проблем, не додавайте пробіл між назвою функції та дужками з аргументами функції і намагайтеся уникати дужок, якщо це можливо з іншими конструкціями мови, такими як керування потоком.
Навігація по курсу
← Більше про функції | Більше про функції / Типізовані параметри →
💪 Or jump directly to the exercise to this section.
Ця сторінка автоматично перекладена за допомогою ChatGPT 4o. Оригінальний текст англійською мовою.
Переклади цієї сторінки: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська