#MonthOfJulia Day 10: Modules
Modules allow you to encapsulate your code and variables. In the words of the Julia documentation:
Modules in Julia are separate global variable workspaces. Modules allow you to create top-level definitions without worrying about name conflicts when your code is used together with somebody else’s. Within a module, you can control which names from other modules are visible (via importing), and specify which of your names are intended to be public (via exporting). Modules, Julia Documentation
To illustrate the concept, let’s define two new modules:
__init__() function is present in the module then it’s executed when the module is defined. Is it my imagination or does the syntax for that function have an uncanny resemblance to something in another popular scripting language?
The greeting() function in the above modules does not exist in the global namespace (which is why the first function call below fails). But you can access functions from either of the modules by explicitly giving the module name as a prefix.
The Afrikaans module exports the greeting() function, which becomes available in the global namespace once the module has been loaded.
But it’s still possible to import into the global namespace functions which have not been exported.
In addition to functions, modules can obviously also encapsulate variables.
That’s pretty much the essence of it although there are a number of subtleties detailed in the official documentation. Well worth a look if you want to suck all the marrow out of Julia’s modules. As usual the code for today’s flirtation can be found on github.