Cursus Raku / Geavanceerd / Modules / Basisbeginselen van modules / Exercises / Laden tijdens runtime
Oplossing: Laden tijdens runtime
Hier is een mogelijke oplossing voor de opgave.
Code
Het programma, require-import.raku:
sub MAIN(Bool :$quiet) {
if $quiet {
say 'Silence.';
}
else {
require Greeting <&hello>;
say hello('Sam');
}
}🦋 Je kunt beide bronbestanden vinden in de map exercises/advanced/modules-basics/require-at-runtime.
Uitvoer
$ raku -I. require-import.raku
Hello, Sam!
$ raku -I. require-import.raku --quiet
Silence.Opmerkingen
requirelaadt de module tijdens de uitvoering in plaats van tijdens het compileren. Op zichzelf importeert het niets, waardoor een kalehelloonbekend zou zijn.De
<&hello>-lijst verteltrequireom dat ene symbool te importeren, zodat na het statementhello('Sam')direct aangeroepen kan worden, watHello, Sam!oplevert.Dit is waarvoor
requirebedoeld is: omdat het tijdens de uitvoering draait, kan het binnen eenifstaan. Wanneer--quietmeegegeven wordt, wordt die tak overgeslagen en wordt de module nooit geladen — iets wat eenusetijdens het compileren niet kan vermijden.