Elixir Language
Модули
Поиск…
замечания
Имена модулей
В 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