Skip to content

Конструкторы типов

В стандартной библиотеке можно часто увидеть такие функции как create, make или init. Все они используются для создание экземпляра значения, вроде списков или строк. Но какие они имеют значение?

Что использовать для своего типа?

Используйте make, если у вас этот случай. В ином случае create.

create

Эта функция создаёт экземпляр из каких-нибудь параметров, не говоря о содержимом.

Пример

Так, например, Bytes.create выделяет кусок памяти (байт), значение в котором никак не проинициализированы. Там могут находиться как пустые ячейки так и "мусор".

ocaml
# Bytes.create 10;;
- : bytes = Bytes.of_string "\b\194\187\148,\127\000\000\000\000"

make

Зачастую используется для инициализации коллекции неким значением.

Пример

ocaml
# Array.make 3 "yo";;
- : string array = [|"yo"; "yo"; "yo"|]

init

Даёт возможность инициализировать коллекцию при создание своим способом.

Пример

ocaml
# Array.init 3 (sprintf "yo%d");;
- : string array = [|"yo0"; "yo1"; "yo2"|]