Как я могу улучшить этот код?Оперативный ввод пользователя [Rust] - PullRequest
0 голосов
/ 01 декабря 2018

Я изучаю Rust, просто кодируя сразу после первых 4 глав Книги.Начало работы Я все еще привыкаю к ​​тому, как работают заимствования и обмены и как мы можем использовать их в коде.

Предполагается, что этот фрагмент кода запрашивает у пользователя IP-адрес, а если нажать клавишу ввода, вернуть адрес обратной связи.Это прекрасно работает, но мне любопытно узнать, как это можно улучшить любым способом, потому что я точно знаю, что это можно.Спасибо!

fn prompt_host() -> String {
   let mut input_text = String::new();
   println!(" input host IP, press enter for loopback:");
   io::stdin()
     .read_line(&mut input_text)
     .expect(" ERROR: failed to read from stdin");
   let len = input_text.len();
   input_text.truncate(len - 1);
   if input_text == "" {
      return String::from("127.0.0.1");
   }
   return input_text as String;
}

1 Ответ

0 голосов
/ 01 декабря 2018

Только некоторые подсказки:

  • Я думаю, что я бы вернул что-то, связанное с std::net::IpAddr вместо String (если есть тип для ваших нужд,Я бы использовал его).

  • std::net::IpAddr реализует FromStr, поэтому вы можете использовать input_text.parse() и получить Result<IpAddr, Err> (поскольку преобразование из строки может завершиться неудачей).

  • Я бы использовал trim, чтобы избавиться от пробелов.

  • Я бы использовал is_empty, чтобы проверить, пуста ли строка.- Или даже охватите этот случай, просто используя parse.

  • Есть (по крайней мере) два места, которые могут потерпеть неудачу: read_line и parse, так что я бы подумал овозвращая Option<IpAddr> или даже Result<IpAddr, ErrorType> для соответствующего ErrorType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...