我正在通过仅在《书》的前4章之后进行编码来学习Rust。入门我仍然习惯于如何借用和共享工作以及如何在代码中利用它们。
该代码段应该提示用户输入IP地址,如果按Enter键,则返回环回地址。它工作正常,但是我很好奇如何以任何方式改进它,因为我绝对知道可以做到。谢谢!
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;
}
答案 0 :(得分:0)
一些提示:
我想我会返回与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
。