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

  1. require laadt de module tijdens de uitvoering in plaats van tijdens het compileren. Op zichzelf importeert het niets, waardoor een kale hello onbekend zou zijn.

  2. De <&hello>-lijst vertelt require om dat ene symbool te importeren, zodat na het statement hello('Sam') direct aangeroepen kan worden, wat Hello, Sam! oplevert.

  3. Dit is waarvoor require bedoeld is: omdat het tijdens de uitvoering draait, kan het binnen een if staan. Wanneer --quiet meegegeven wordt, wordt die tak overgeslagen en wordt de module nooit geladen — iets wat een use tijdens het compileren niet kan vermijden.

Cursusnavigatie

Laden tijdens runtime   |   Module-introspectie