Поиск…


замечания

Имена модулей

В Elixir имена модулей, такие как IO или String являются атомами под капотом и преобразуются в форму :"Elixir.ModuleName" во время компиляции.

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

Список функций или макросов модуля

Функция __info__/1 принимает один из следующих атомов:

  • :functions - возвращает список ключевых слов с публичными функциями вместе со своими задачами
  • :macros Возвращает список ключевых слов с общедоступными макросами вместе с их свойствами.

Чтобы перечислить функции модуля 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, ...]

Замените Kernel любым выбранным вами модулем.

Использование модулей

Модули имеют четыре связанных ключевых слова, чтобы использовать их в других модулях: alias , import , use и require .

alias будет регистрировать модуль под другим (обычно коротким) именем:

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 сделает все функции в модуле доступными без имени перед ними:

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

use позволяет модулю вводить код в текущий модуль - обычно это делается как часть структуры, которая создает свои собственные функции, чтобы ваш модуль подтвердил какое-либо поведение.

require загрузки макросов из модуля, чтобы их можно было использовать.

Передача функций другому модулю

Используйте defdelegate для определения функций, которые делегируются функциям с тем же именем, определенным в другом модуле:

defmodule Math do
  defdelegate pi, to: :math
end


iex> Math.pi
3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow