Пожалуйста, смотрите документацию , и вы можете видеть, что read_line
мутирует содержимое его параметра (в вашем случае, пустая строка, связанная с buffer
), ставит значение считывается в него, и возвращается длина чтения . Но вы распаковываете этот результат и конвертируете эту длину в строку.
Вместо этого ваша функция должна выглядеть следующим образом:
fn ask_nick() -> String {
let reader = io::stdin();
let mut buffer: String = String::new();
reader.read_line(&mut buffer)
.ok()
.expect("ERRMSG");
println!("OK: Hello {}!", buffer);
return buffer;
}
Или, что еще более идиотски, не паниковать, когда предоставляется неверный ввод:
fn ask_nick() -> Result<String> {
let reader = io::stdin();
let mut buffer: String = String::new();
match reader.read_line(&mut buffer) {
Ok(_) => Ok(buffer),
Err(e) => Err(e),
}
}
В этом варианте вызывающая сторона решает, как обрабатывать ошибки.