From 99a097f1313c08b8af41769928f2d1b2377d1cd7 Mon Sep 17 00:00:00 2001 From: jashka34 Date: Thu, 12 Oct 2023 19:09:36 +0000 Subject: [PATCH 1/2] Translate ch08-02-strings.md via GitLocalize --- rustbook-ru/src/ch08-02-strings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rustbook-ru/src/ch08-02-strings.md b/rustbook-ru/src/ch08-02-strings.md index 61448665d..9215c778a 100644 --- a/rustbook-ru/src/ch08-02-strings.md +++ b/rustbook-ru/src/ch08-02-strings.md @@ -62,7 +62,7 @@ {{#rustdoc_include ../listings/ch08-common-collections/listing-08-15/src/main.rs:here}} ``` -Листинг 8-15: Добавление среза строки к String используя метод push_str +Listing 8-15: Appending a string slice to a String using the push_str method После этих двух строк кода `s` будет содержать `foobar`. Метод `push_str` принимает строковый срез, потому что мы не всегда хотим владеть входным параметром. Например, код в листинге 8-16 показывает вариант, когда будет не желательно поведение, при котором мы не сможем использовать `s2` после его добавления к содержимому значения переменной `s1`. From b7c089613f010fdc58514e183d6a40991e95a9b9 Mon Sep 17 00:00:00 2001 From: Dmitry Luschan Date: Thu, 12 Oct 2023 19:09:37 +0000 Subject: [PATCH 2/2] Translate ch08-02-strings.md via GitLocalize --- rustbook-ru/src/ch08-02-strings.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rustbook-ru/src/ch08-02-strings.md b/rustbook-ru/src/ch08-02-strings.md index 9215c778a..2f6ac9518 100644 --- a/rustbook-ru/src/ch08-02-strings.md +++ b/rustbook-ru/src/ch08-02-strings.md @@ -62,7 +62,7 @@ {{#rustdoc_include ../listings/ch08-common-collections/listing-08-15/src/main.rs:here}} ``` -Listing 8-15: Appending a string slice to a String using the push_str method +Листинг 8-15. Добавление среза строки к String с помощью метода push_str После этих двух строк кода `s` будет содержать `foobar`. Метод `push_str` принимает строковый срез, потому что мы не всегда хотим владеть входным параметром. Например, код в листинге 8-16 показывает вариант, когда будет не желательно поведение, при котором мы не сможем использовать `s2` после его добавления к содержимому значения переменной `s1`. @@ -70,7 +70,7 @@ {{#rustdoc_include ../listings/ch08-common-collections/listing-08-16/src/main.rs:here}} ``` -Листинг 8-16: Использование фрагмента строки после его добавления в состав другого String +Листинг 8-16: Использование среза строки после добавления её содержимого к другой String Если метод `push_str` стал бы владельцем переменной`s2`, мы не смогли бы напечатать его значение в последней строке. Однако этот код работает так, как мы ожидали! @@ -106,7 +106,7 @@ fn add(self, s: &str) -> String { Причина, по которой мы можем использовать `&s2` в вызове `add` заключается в том, что компилятор может *принудительно привести (coerce)* аргумент типа `&String` к типу `&str`. Когда мы вызываем метод `add` в Rust используется *принудительное приведение* (deref coercion), которое превращает `&s2` в `&s2[..]`. Мы подробно обсудим принудительное приведение в Главе 15. Так как `add` не забирает во владение параметр `s`, `s2` по прежнему будет действительной строкой `String` после применения операции. -Во-вторых, как можно видеть в сигнатуре, `add` забирает во владение `self`, потому что `self` *не имеет* `&`. Это означает, что `s1` в листинге 8-18 будет перемещён в вызов `add` и больше не будет действителен после этого вызова. Не смотря на то, что код `let s3 = s1 + &s2;` выглядит как будто он скопирует обе строки и создаёт новую, это выражение фактически забирает во владение переменную `s1`, присоединяет к ней копию содержимого `s2`, а затем возвращает владение результатом. Другими словами, это выглядит как будто код создаёт множество копий, но это не так; данная реализация более эффективна, чем копирование. +Во-вторых, как можно видеть в сигнатуре, `add` забирает во владение `self`, потому что `self` *не имеет* `&`. Это означает, что `s1` в листинге 8-18 будет перемещён в вызов `add` и больше не будет действителен после этого вызова. Не смотря на то, что код `let s3 = s1 + &s2;` выглядит как будто он скопирует обе строки и создаёт новую, эта инструкция фактически забирает во владение переменную `s1`, присоединяет к ней копию содержимого `s2`, а затем возвращает владение результатом. Другими словами, это выглядит как будто код создаёт множество копий, но это не так; данная реализация более эффективна, чем копирование. Если нужно объединить несколько строк, поведение оператора `+` становится громоздким: @@ -216,7 +216,7 @@ let s = &hello[0..4]; ### Методы для перебора строк -Лучший способ работать с фрагментами строк - чётко указать, нужны ли вам символы или байты. Для отдельных скалярных значений в Юникоде используйте метод `chars`. Вызов `chars` у "Зд" выделяет и возвращает два значения типа `char`, и вы можете выполнить итерацию по результату для доступа к каждому элементу: +Лучший способ работать с фрагментами строк — чётко указать, нужны ли вам символы или байты. Для отдельных скалярных значений в Юникоде используйте метод `chars`. Вызов `chars` у "Зд" выделяет и возвращает два значения типа `char`, и вы можете выполнить итерацию по результату для доступа к каждому элементу: ```rust for c in "Зд".chars() {