一位 Python 开发者学习 Rust 的心路历程
我对学习一门新语言一直犹豫不决。在我的职业生涯中,我大部分时间都使用Python。当需要时,我也会使用诸如PowerShell、Lua和Javascript等语言,但我总是回到我熟悉的领域。我在大学之外从未使用过编译语言或系统语言,现在是时候重新学习一门新语言了。
我一直在学习 Go 和 Rust 之间犹豫不决,同时也在思考是否真的需要转向其他语言,因为我在 Python 方面从未遇到过让我不得不转换的难题。Rust 在速度和安全性方面一直名列前茅,并且根据 Stack Overflow 的调查,它也是最受欢迎的编程语言之一。
我真正被激发去深入学习Rust的原因是听了《Ship It》播客,Tim McNamara 在其中谈到他如何在 AWS 推广 Rust。Rust 不仅仅能节省计算资源,还能提高可持续性,节约资金。通过观察 Lambda 的冷启动时间,并推断出所有可能受益的资源,将会大大减少所需资源的数量。
然后我开始了一场学习之旅.
ReadMore: https://blog.erikhorton.com/2023/10/22/skills-getting-rusty.html
从 Vec<Result<>> 中生成 Result<>
假设你有一个可能失败的函数,并且你调用它多次。类似这样的情况:
代码语言:javascript复制fn fetch_chunk(from: usize, to: usize) -> Result<Row, Error> {
// 一些实现
}
当我们调用它时,如果直接收集结果,我们会得到一堆 Result
:
let chunks: Vec<Result<Row, Error>> =
indexes.iter().map(|i| fetch_chunk(i, i 1)).collect();
这样处理起来有点丑陋。在很多情况下,这可能确实是你想要的类型,因为你可以知道哪些操作失败了。但有时,你只想知道是否有任何失败,那么你可以直接将结果收集到一个 Result
中
let chunks: Result<Vec<Row>, Error> =
indexes.iter().map(|i| fetch_chunk(i, i 1)).collect();
这是几乎相同的代码,只是有不同的类型签名,并且收集到不同的类型中。这真是太酷啦。
ReadMore: https://ntietz.com/blog/rust-vec-of-result/