Browse Source

Translate ch15-06-reference-cycles.md via GitLocalize

pull/1119/head
Yuriy Larin 3 years ago committed by gitlocalize-app[bot]
parent
commit
fecf79cd5e
  1. 14
      rustbook-ru/src/ch15-06-reference-cycles.md

14
rustbook-ru/src/ch15-06-reference-cycles.md

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
Давайте посмотрим, как может произойти ситуация ссылочного зацикливания и как её предотвратить, начиная с определения перечисления `List` и метода `tail` в листинге 15-25:
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-25/src/main.rs}}
@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
В листинге 15-26 мы добавляем `main` функцию, которая использует определения листинга 15-25. Этот код создаёт список в переменной `a` и список `b`, который указывает на список `a`. Затем он изменяет список внутри `a` так, чтобы он указывал на `b`, создавая ссылочное зацикливание. В коде есть инструкции `println!`, чтобы показать значения счётчиков ссылок в различных точках этого процесса.
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-26/src/main.rs:here}}
@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
Для начала мы построим дерево с узлами, которые знают о своих дочерних узлах. Мы создадим структуру с именем `Node`, которая будет содержать собственное значение `i32`, а также ссылки на его дочерние значения `Node`:
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-27/src/main.rs:here}}
@ -74,7 +74,7 @@ @@ -74,7 +74,7 @@
Далее мы будем использовать наше определение структуры и создадим один экземпляр `Node` с именем `leaf` со значением 3 и без дочерних элементов, а другой экземпляр с именем `branch` со значением 5 и `leaf` в качестве одного из его дочерних элементов, как показано в листинге 15-27:
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-27/src/main.rs:there}}
@ -92,7 +92,7 @@ @@ -92,7 +92,7 @@
Поэтому вместо `Rc<T>` мы сделаем так, чтобы поле `parent` использовало тип `Weak<T>`, а именно `RefCell<Weak<Node>>`. Теперь наше определение структуры `Node` выглядит так:
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-28/src/main.rs:here}}
@ -100,7 +100,7 @@ @@ -100,7 +100,7 @@
Узел сможет ссылаться на свой родительский узел, но не владеет своим родителем. В листинге 15-28 мы обновляем `main` на использование нового определения так, чтобы у узла `leaf` был бы способ ссылаться на его родительский узел `branch`:
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-28/src/main.rs:there}}
@ -132,7 +132,7 @@ children: RefCell { value: [] } }] } }) @@ -132,7 +132,7 @@ children: RefCell { value: [] } }] } })
Давайте посмотрим, как изменяются значения `strong_count` и `weak_count` экземпляров типа `Rc<Node>` с помощью создания новой внутренней области видимости и перемещая создания экземпляра `branch` в эту область. Таким образом можно увидеть, что происходит, когда `branch` создаётся и затем удаляется при выходе из области видимости. Изменения показаны в листинге 15-29:
<span class="filename">Файл : src/main.rs</span>
<span class="filename">Файл: src/main.rs</span>
```rust
{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-29/src/main.rs:here}}

Loading…
Cancel
Save