Szukaj…


Uwagi

Nazwy modułów

W Elixir nazwy modułów, takie jak IO lub String są tylko atomami pod maską i są konwertowane do postaci :"Elixir.ModuleName" w czasie kompilacji.

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

Wymień funkcje modułu lub makra

Funkcja __info__/1 przyjmuje jeden z następujących atomów:

  • :functions - Zwraca listę słów kluczowych funkcji publicznych wraz z ich rodzajem
  • :macros - Zwraca listę słów kluczowych makr publicznych wraz z ich rodzajem

Aby wyświetlić listę funkcji modułu Kernel :

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

Zastąp Kernel dowolnym wybranym modułem.

Korzystanie z modułów

Moduły mają cztery powiązane słowa kluczowe, dzięki którym można ich używać w innych modułach: alias , import , use i require .

alias zarejestruje moduł pod inną (zwykle krótszą) nazwą:

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 spowoduje udostępnienie wszystkich funkcji w module bez nazwy przed nimi:

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

use pozwala modułowi na wstrzyknięcie kodu do bieżącego modułu - zwykle odbywa się to jako część frameworka, który tworzy własne funkcje, aby twój moduł potwierdził pewne zachowanie.

require załadowania makr z modułu, aby można było z nich korzystać.

Delegowanie funkcji do innego modułu

Użyj defdelegate aby zdefiniować funkcje, które delegują funkcje o tej samej nazwie zdefiniowanej w innym module:

defmodule Math do
  defdelegate pi, to: :math
end


iex> Math.pi
3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow