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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow