Я пытаюсь изучить ржавчину с помощью шорохов, и я сталкиваюсь с этой странной ошибкой. Я понимаю, что он изменяет себя на месте, но почему он возвращает единицу () вместо измененной строки
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")
}
}
Вы спрашиваете «почему», например, «почему это было спроектировано так», и в этом случае его следует закрыть как основанное на мнении или что-то еще?
Подсказка: ; self
в этой функции.
Существующий ответ устраняет путаницу из .push_str()
, но вы можете просто реализовать эту функцию через self + " bar"
: игровая площадка.
Что-то вроде этого?
impl AppendBar for String {
fn append_bar(mut self) -> Self {
self.push_str(" bar");
self
}
}
Функция String::push_str
ничего не возвращает, она изменяет строку на месте.
Итак, вам нужно будет изменить себя и вернуть его в двух отдельных операторах.
Я думаю, что это правильный ответ, но может быть полезно добавить краткое объяснение, чтобы устранить недоразумение OP? (например, показать, что подпись push_str()
ничего не возвращает, поэтому нужно явно вернуть self
)
Потому что
push_str
ничего не возвращает. Если хотите вернутьSelf
, то сделайте это.