< 返回版块

Koalr 发表于 2023-10-24 17:06

Tags:rust,日报

一位 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<>

假设你有一个可能失败的函数,并且你调用它多次。类似这样的情况:

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/

ratatui v0.24.0 发布

ratatui 是一个专注于打造TUI(文本用户界面)的 Rust 库,现在发布了 v0.24.0 版本,引入了窗口大小API、增强的图表渲染等功能。

ReadMore: https://github.com/ratatui-org/ratatui/releases/tag/v0.24.0


From 日报小组 Koalr

社区学习交流平台订阅:

评论区

写评论
asuper 2023-10-31 09:32

从 Vec<Result<>> 中生成 Result<> 这个有点意思,collect还能判断是否有error

1 共 1 条评论, 1 页