Курс языка программирования Raku / Продвинутый уровень / Модули / Основы модулей / Exercises / Загрузка во время выполнения
Решение: Загрузка во время выполнения
Вот один из возможных вариантов решения задачи.
Код
Программа 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.Комментарии
requireзагружает модуль во время выполнения, а не во время компиляции. Сам по себе он ничего не импортирует — поэтому простоhelloосталось бы неизвестным именем.Список
<&hello>предписываетrequireимпортировать этот единственный символ, так что после этой инструкцииhello('Sam')можно вызывать напрямую, получаяHello, Sam!.Ради этого
requireи нужен: поскольку он выполняется во время работы программы, его можно поместить внутрьif. Если задан--quiet, эта ветка пропускается и модуль не загружается вовсе — чегоuse, работающий во время компиляции, избежать бы не смог.