Compile-time callbacks
Elixir also provides a mechanism to hook into the compilation of a module and perform tasks. These tasks can range from something as simple as logging to something as complex as injecting behavior.
These callbacks can be registered by using special reserved module attributes, but they are invoked depending on their type. There are three types of compile-time callbacks:
@
before_compile
@
after_compile
@
on_definition
Before compile
A callback registered using the @before_compile
module attribute is registered as a before compile callback. As the name suggests, this callback is invoked right before the module is finished compiling.
Since this callback is invoked after all the functions in the module are defined, it has access to the module’s functions and its attributes.
The callback can be either a function or a macro, but it needs to be defined in a different module outside of the current module, since it hasn’t...