Enforcing behaviors
One of the reserved module attributes in Elixir is @behaviour
. It is used to ensure that a given module implements the required callbacks and that the module implements a given interface and behaves in a defined way.
How to do it…
To demonstrate the use of the @behaviour
module attribute, follow these steps:
Create the
Randomizer
module inside therandomizer.ex
file by adding the following code:defmodule Randomizer do use Behaviour defcallback randomize(low::Integer.t, high::Integer.t) :: Integer.t end
Create a module to implement the
Randomizer
behavior inside themy_module.ex
file by adding the following code:defmodule MyModule do @behaviour Randomizer end
Open a new IEx session in the same directory where the modules defined in steps 1 and 2 are stored:
> iex
Compile both modules starting with
Randomizer
:iex(1)> c("randomizer.ex") [Randomizer] iex(2)> c("my_module.ex") my_module.ex:1: warning: undefined behaviour function randomize/2 (for behaviour Randomizer...