Elixir Language
modules
Zoeken…
Opmerkingen
Module namen
In Elixir zijn modulenamen zoals IO
of String
gewoon atomen onder de motorkap en worden tijdens het compileren omgezet in de vorm :"Elixir.ModuleName"
.
iex(1)> is_atom(IO)
true
iex(2)> IO == :"Elixir.IO"
true
Lijst van de functies of macro's van een module
De functie __info__/1
heeft een van de volgende atomen:
-
:functions
- Retourneert een trefwoordenlijst met openbare functies samen met hun arities -
:macros
- Retourneert een lijst met zoekwoorden van openbare macro's samen met hun arities
Om de functies van de Kernel
weer te geven:
iex> Kernel.__info__ :functions
[!=: 2, !==: 2, *: 2, +: 1, +: 2, ++: 2, -: 1, -: 2, --: 2, /: 2, <: 2, <=: 2,
==: 2, ===: 2, =~: 2, >: 2, >=: 2, abs: 1, apply: 2, apply: 3, binary_part: 3,
bit_size: 1, byte_size: 1, div: 2, elem: 2, exit: 1, function_exported?: 3,
get_and_update_in: 3, get_in: 2, hd: 1, inspect: 1, inspect: 2, is_atom: 1,
is_binary: 1, is_bitstring: 1, is_boolean: 1, is_float: 1, is_function: 1,
is_function: 2, is_integer: 1, is_list: 1, is_map: 1, is_number: 1, is_pid: 1,
is_port: 1, is_reference: 1, is_tuple: 1, length: 1, macro_exported?: 3,
make_ref: 0, ...]
Vervang Kernel
door een module naar keuze.
Modules gebruiken
Modules hebben vier bijbehorende trefwoorden om ze in andere modules te gebruiken: alias
, import
, use
en require
.
alias
registreert een module onder een andere (meestal kortere) naam:
defmodule MyModule do
# Will make this module available as `CoolFunctions`
alias MyOtherModule.CoolFunctions
# Or you can specify the name to use
alias MyOtherModule.CoolFunctions, as: CoolFuncs
end
import
zal alle functies in de module beschikbaar maken zonder naam ervoor:
defmodule MyModule do
import Enum
def do_things(some_list) do
# No need for the `Enum.` prefix
join(some_list, " ")
end
end
use
staat een module toe om code in de huidige module te injecteren - dit wordt meestal gedaan als onderdeel van een raamwerk dat zijn eigen functies creëert om uw module aan enig gedrag te laten bevestigen.
require
ladingen macro's van de module zodat ze kunnen worden gebruikt.
Functies delegeren naar een andere module
Gebruik defdelegate
om functies te definiëren die delegeren naar functies met dezelfde naam die in een andere module is gedefinieerd:
defmodule Math do
defdelegate pi, to: :math
end
iex> Math.pi
3.141592653589793