Важно понимать различия между String
и &str
, и почему различные методы принимают и возвращают каждый из них.
A &str
или &mut str
обычно предпочтительнее варгументы функции и возвращаемые типы.Это потому, что они являются просто указателями на данные, поэтому при их передаче ничего не нужно копировать или перемещать.
A String
возвращается, когда функции необходимо выполнить какое-то новое распределение, тогда как &str
и &mut str
- это кусочки существующего String
.Даже если &mut str
является изменяемым, вы не можете изменить его таким образом, чтобы увеличить его длину, потому что это потребовало бы дополнительного выделения.
Функция trim
может возвращать срез &str
, потому что этоне требует изменения исходной строки - обрезанная строка - это просто подстрока, которую идеально описывает срез.Но иногда это невозможно;например, функция, добавляющая строку с дополнительным символом, должна будет вернуть String
, поскольку она будет выделять новую память.
Вы можете уменьшить количествовведите преобразования в ваш код, выбрав различные методы:
for c in chars {
append.push(c); // append += &_char.to_string();
append = append.trim().to_string();
if append.contains("print") {
println!("print found at: \n{}", append);
append.clear(); // append = "".to_string();
}
}
Нет ничего похожего на trim_in_place
метод для String
, поэтому способ, которым вы это сделали, вероятно, единственный.