Курс Raku / Розширені / Модулі / Основи модулів / Вправи / Завантажити під час виконання

Розв’язання: Завантажити під час виконання

Ось один із можливих варіантів розв’язання задачі.

Код

Програма require-import.raku:

sub MAIN(Bool :$quiet) {
    if $quiet {
        say 'Silence.';
    }
    else {
        require Greeting <&hello>;
        say hello('Sam');
    }
}

🦋 Обидва файли з вихідним кодом можна знайти в каталозі exercises/advanced/modules-basics/require-at-runtime.

Вивід

$ raku -I. require-import.raku
Hello, Sam!

$ raku -I. require-import.raku --quiet
Silence.

Коментарі

  1. require завантажує модуль під час виконання, а не під час компіляції. Сам по собі він нічого не імпортує, — саме тому голий hello був би невідомим.

  2. Список <&hello> каже require імпортувати цей один символ, тож після цього оператора hello('Sam') можна викликати напряму, отримуючи Hello, Sam!.

  3. Саме для цього й існує require: оскільки він виконується під час виконання, він може стояти всередині if. Коли задано --quiet, ця гілка пропускається, і модуль ніколи не завантажується — чого use, що працює під час компіляції, уникнути б не зміг.

Навігація курсом

Завантажити під час виконання   |   Інтроспекція модулів