Skip to content

Commit a8e3ebe

Browse files
committed
Добавлен рецепт про названия конструкторов
1 parent 4ae05e0 commit a8e3ebe

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

docs/.vitepress/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export default defineConfig({
2929
{ text: "Unsafe", link: "/unsafe" },
3030
{ text: "Обработка ошибок", link: "/errors" },
3131
{ text: "Хвостовая рекурсия", link: "/tailcall" },
32+
{ text: "Конструкторы", link: "/constructor" },
3233
],
3334
},
3435
{

docs/recipes/constructor.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Конструкторы типов
2+
3+
В стандартной библиотеке можно часто увидеть такие функции как `create`, `make` или `init`.
4+
Все они используются для создание экземпляра значения, вроде списков или строк. Но какие они имеют значение?
5+
6+
> [!TIP] Что использовать для своего типа?
7+
> Используйте `make`, если у вас [этот случай](https://github.com/ocaml-ppx/ppx_deriving#plugin-make).
8+
> В ином случае `create`.
9+
10+
### `create`
11+
12+
Эта функция создаёт экземпляр из каких-нибудь параметров, не говоря _о содержимом_.
13+
14+
> [!NOTE] Пример
15+
> Так, например, `Bytes.create` выделяет кусок памяти (байт), значение в котором никак не проинициализированы.
16+
> Там могут находиться как пустые ячейки так и "мусор".
17+
>
18+
> ```ocaml
19+
> # Bytes.create 10;;
20+
> - : bytes = Bytes.of_string "\b\194\187\148,\127\000\000\000\000"
21+
> ```
22+
23+
### `make`
24+
25+
Зачастую используется для инициализации коллекции неким значением.
26+
27+
> [!NOTE] Пример
28+
>
29+
> ```ocaml
30+
> # Array.make 3 "yo";;
31+
> - : string array = [|"yo"; "yo"; "yo"|]
32+
> ```
33+
34+
### `init`
35+
36+
Даёт возможность инициализировать коллекцию при создание своим способом.
37+
38+
> [!NOTE] Пример
39+
>
40+
> ```ocaml
41+
> # Array.init 3 (sprintf "yo%d");;
42+
> - : string array = [|"yo0"; "yo1"; "yo2"|]
43+
> ```

0 commit comments

Comments
 (0)