Метод `push_str` возвращает() вместо String

Я пытаюсь изучить ржавчину с помощью шорохов, и я сталкиваюсь с этой странной ошибкой. Я понимаю, что он изменяет себя на месте, но почему он возвращает единицу () вместо измененной строки

impl AppendBar for String {
    // TODO: Implement `AppendBar` for type `String`.
    fn append_bar(self) -> Self {
        self.push_str(" bar")
    }
}

Сначала я попытался поместить его в переменную, но все равно получаю ту же ошибку. Я ожидал, что это позволит избежать возвращаемого типа unit().

impl AppendBar for String {
    // TODO: Implement `AppendBar` for type `String`.
    fn append_bar(self) -> Self {
       let mut contain = self;
       contain.push_str(" bar")
    }
}

Потому что push_str ничего не возвращает. Если хотите вернуть Self, то сделайте это.

tkausl 27.12.2022 18:23

Вы спрашиваете «почему», например, «почему это было спроектировано так», и в этом случае его следует закрыть как основанное на мнении или что-то еще?

Chayim Friedman 27.12.2022 18:23

Подсказка: ; self в этой функции.

tadman 27.12.2022 19:04

Существующий ответ устраняет путаницу из .push_str(), но вы можете просто реализовать эту функцию через self + " bar": игровая площадка.

kmdreko 28.12.2022 05:00
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
4
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то вроде этого?

impl AppendBar for String {
    fn append_bar(mut self) -> Self {
        self.push_str(" bar");
        self
    }
}

Функция String::push_str ничего не возвращает, она изменяет строку на месте.

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

Я думаю, что это правильный ответ, но может быть полезно добавить краткое объяснение, чтобы устранить недоразумение OP? (например, показать, что подпись push_str() ничего не возвращает, поэтому нужно явно вернуть self)

effect 27.12.2022 19:32

Другие вопросы по теме