Модули - это набор функций, перегруппированных в один файл под одним именем. Кроме того, все функции в Erlang должны быть определены в модулях.

Большинство базовых функций, таких как арифметические, логические и булевы операторы, уже доступны, поскольку модули по умолчанию загружаются при запуске программы. Каждая другая функция, определенная в модуле, который вы когда-либо используете, должна вызываться с помощью формы Module: Function (Аргументы).

Определение модуля

С помощью модуля вы можете объявить два вида вещей: функции и атрибуты. Атрибуты - это метаданные, описывающие сам модуль, такие как его имя, функции, которые должны быть видны внешнему миру, автору кода и т. Д. Этот вид метаданных полезен, поскольку он дает подсказки компилятору о том, как он должен выполнять свою работу, а также потому, что он позволяет людям извлекать полезную информацию из скомпилированного кода без необходимости консультироваться с источником.

Синтаксис объявления функции выглядит следующим образом:

-module(modulename)

modulename - это имя модуля. Это должна быть первая строка кода в модуле.

Следующая программа показывает пример модуля helloworld .

-module(helloworld). 
-export([start/0]). 

start() -> 
   io:fwrite("Hello World").

Атрибуты модуля

Атрибут модуля определяет определенное свойство модуля. Атрибут модуля состоит из тега и значения.

Общий синтаксис атрибута -

-Tag(Value)

Пример использования атрибута показан в следующей программе:

-module(helloworld). 
-author("TutorialPoint"). 
-version("1.0"). 
-export([start/0]). 

start() -> 
   io:fwrite("Hello World").

Вышеупомянутая программа определяет 2 пользовательских атрибута, называемых автором и версией, которые содержат соответственно автора программы и номер версии программы.

Предварительно созданные атрибуты

У Erlang есть некоторые заранее созданные атрибуты, которые могут быть присоединены к модулям. Давайте посмотрим на них.

Экспорт

Атрибут export будет отображать список функций и возможностей для экспорта для потребления другими модулями. Он определит интерфейс модуля. Мы уже видели это во всех наших предыдущих примерах.

export([FunctionName1/FunctionArity1,.,FunctionNameN/FunctionArityN])
  • FunctionName - это имя функции в программе.
  • FunctionArity - это число параметров, связанных с функцией.
-module(helloworld). 
-author("TutorialPoint"). 
-version("1.0"). 
-export([start/0]). 

start() -> 
   io:fwrite("Hello World").

Импортировать

Атрибут import используется для импорта функций из другого модуля, чтобы использовать его как локальный.

-import (modulename , [functionname/parameter]).
  • Modulename - это имя модуля, который необходимо импортировать.
  • functionname/parameter - функция в модуле, который необходимо импортировать.
-module(helloworld). 
-import(io,[fwrite/1]). 
-export([start/0]). 

start() -> 
   fwrite("Hello, world!\n").

В приведенном выше коде мы используем ключевое слово import для импорта библиотеки 'io' и, в частности, функцию fwrite. Итак, теперь, когда мы вызываем функцию fwrite, мы не должны упоминать имя модуля io во всем мире.