gpt4 book ai didi

rust - 嵌套匹配在惯用的 Rust 中是一种不好的做法吗?

转载 作者:行者123 更新时间:2023-11-29 07:43:08 24 4
gpt4 key购买 nike

我有一个 get_url_content功能并且不关心错误(这只是一个测试)。它返回 Option<String> .

extern crate hyper;

use std::io::Read;
use hyper::client::Client;

fn get_url_content(url: &str) -> Option<String> {
let client = Client::new();
let mut s = String::new();

match client.get(url).send() {
Ok(mut res) => {
match res.read_to_string(&mut s) {
Ok(_) => {
Some(s)
},
Err(_) => {
None
}
}
},
Err(_) => {
None
}
}
}

这个函数工作正常,但我发现它不容易阅读。我认为有一些关于这种情况的最佳实践可以使它更具可读性。嵌套匹配是否是一种不良做法(如 JS 中的回调 hell )?如果是,如何避免?

最佳答案

让事情变得更干净的最简单方法是去掉一些大括号:

match client.get(url).send() {
Ok(mut res) =>
match res.read_to_string(&mut s) {
Ok(_) => Some(s),
Err(_) => None,
},
Err(_) => None,
}

内部匹配可以更简洁地表达为

match client.get(url).send() {
Ok(mut res) =>
res.read_to_string(&mut s).ok().map(|_| s),

Err(_) => None,
}

这建议使用 map在外部类型上(得到 Result<Option<_>, _> )然后用 .unwrap_or(None) 删除结果或 .unwrap_or_default()

client.get(url).send()
.map(|mut res| res.read_to_string(&mut s).ok().map(|_| s))
.unwrap_or(None)

关于rust - 嵌套匹配在惯用的 Rust 中是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38522870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com