print!("Enter {name}: ");
io::stdout()
.flush()
.map_err(|o| o.to_string())?;
let mut x = String::new();
io::stdin()
.read_line(&mut x)
.map_err(|o| o.to_string())?;
Ok(x.trim().to_string())
}
это норм писать trim() который возвращает &str а потом приводить его к стринге через to_string() ?
Норм, но можно менять и in-place
> in-place это как
let trimmed_len = x.trim_start().len(); let len = x.len(); x.replace_range(len - trimmed_len.., ""); let trimmed_len = x.trim_end().len(); x.truncate(trimmed_len);
чет звучит не очень если памяти больше чем в электрочайнике то можно обойтись просто новой аллокацией стринга? все-равно исходная строка уничтожится на выходе из функции
replace_range и truncate меняют строку in-place вместо создания новой. Можешь оставить код, как есть, разумеется, но это будет больше аллокаций, чем нужно
Алсо советую использовать крейт dialoguer
окей, я пока просто с языком балуюсь, утилит не пишу
Обсуждают сегодня