Sök…


Anmärkningar

Modulnamn

I Elixir är modulnamn som IO eller String bara atomer under huven och konverteras till formen :"Elixir.ModuleName" vid sammanställningstiden.

iex(1)> is_atom(IO)
true
iex(2)> IO == :"Elixir.IO"
true

Lista en moduls funktioner eller makron

__info__/1 tar ett av följande atomer:

  • :functions - Returnerar en nyckelordslista med offentliga funktioner tillsammans med deras arity
  • :macros - Returnerar en nyckelordslista med offentliga makron tillsammans med deras arities

För att lista Kernel modulens funktioner:

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, ...]

Byt ut Kernel med valfri modul.

Med hjälp av moduler

Moduler har fyra associerade nyckelord för att använda dem i andra moduler: alias , import , use och require .

alias registrerar en modul under ett annat (vanligtvis kortare) namn:

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 kommer att göra alla funktioner i modulen tillgängliga utan namn framför dem:

defmodule MyModule do
  import Enum
  def do_things(some_list) do
    # No need for the `Enum.` prefix
    join(some_list, " ")
  end
end

use tillåter en modul att injicera kod i den aktuella modulen - detta görs vanligtvis som en del av ett ramverk som skapar egna funktioner för att din modul ska bekräfta vissa beteenden.

require laster makron från modulen så att de kan användas.

Delegera funktioner till en annan modul

Använd defdelegate att definiera funktioner som delegerar till funktioner med samma namn som definieras i en annan modul:

defmodule Math do
  defdelegate pi, to: :math
end


iex> Math.pi
3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow