问题标签 [rust-result]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - Result<()> 在 Rust 中是什么意思?
我正在查看std::env::current_dir函数文档,这引起了我的注意:
我的理解是 Result 应该有 aT
和E
. 你怎么能用它们来代替它们()
?
rust - 结果中的“T”代表什么在锈?
官方文档大量引用T
:
我认为这些是占位符首字母缩写词。虽然E
应该代表“错误”,但我不确定T
代表什么。
error-handling - 从迭代器收集所有错误的惯用方法
假设我有attrs: Vec<Attribute>
一些函数属性和一个fn map_attribute(attr: &Attribute) -> Result<TokenStream, Error>
将属性映射到某些代码的函数。
我知道我可以写这样的东西:
然而,这不是我想要的。我想要的是一次吐出所有错误,而不是停止第一个错误。目前我做这样的事情:
第二个版本可以满足我的要求,但比第一个版本要冗长得多。如果可能的话,是否有更好/更惯用的方法来实现这一点,而无需创建我自己的迭代器?
rust - 为什么 Rustlings 不强迫我使用 Result?
经过短暂的尝试,当我运行 Rustling 测试时exercises/error_handling/errorsn.rs
,我得到
69号线有
做一些调试我可以看到read_and_validate(&mut b)
正在返回,
我第一次尝试解决这个问题是,
uh-oh!
但是在我看到的代码中寻找这似乎毫无意义,
所以我现在可以说我不应该写“呃 - 哦!” 任何地方。查看我的错误的原因,他们提供的错误代码(我们应该修复)有,
我所要做的就是将其更改为以下内容,
虽然这很容易,但没有任何意义。抬头.read_line
我看到它返回一个Result
.
所以我最后的问题是为什么调用者.read_line
不必处理它返回的错误?似乎这个 Rustlings 的教训几乎是在诱使用户告诉他们你不能依赖类型安全。查看文档,所有这些似乎都没有记录。Rust 甚至有一个名为“必须使用结果”的部分,
Result 使用属性进行注释
#[must_use]
,这将导致编译器在忽略 Result 值时发出警告。这使得 Result 对于可能遇到错误但不会返回有用值的函数特别有用。[...] 如果你用 Rust 编写,编译器会给你一个警告(默认情况下......
这种行为记录在哪里?还有哪些其他核心功能可以让错误无法处理?
error-handling - 如何重用“结果”?
以下不编译。使这项工作的规范方法是什么?
为了完整起见,这是错误消息:
rust - dotenv().ok() 有什么作用?
我将 Diesel ORM 包装器与 PostgreSQL 一起使用。我正在关注他们网站上的指南,其中包含以下代码:
dotenv()
我通过 dotenv 文档了解了它的作用——它加载了 env 文件。在源代码中,我看到它dotenv()
返回一个Result
. 那做什么ok()
呢?它会解开结果吗?如果是这样,为什么不使用unwrap()
?
rust - 无法调用返回结果的函数:发现不透明类型 impl std::future::Future
我无法从Result
. 每个教程只展示如何使用一个结果,而不是如何从它返回一个值。
我收到以下错误:
rust - 在 Rust 结果的 Iter 上调用 map
我想以“函数式编程”风格编写一些代码。
但是,我从结果迭代器开始,我只想将函数应用于Ok
项目。此外,我想在第一个错误上停止迭代(但是,我愿意接受不同的行为)。
到目前为止,我使用的是嵌套map()
模式:<iter>.map(|l| l.map(replace))
. 我认为这是非常丑陋的。
使用每晚的“result_flattening”,我可以将每个嵌套Result<Result<T, E>, E>
的Result<T, E>
. 使用eyre::Context
我将不同的错误类型转换为eyre::Report
错误类型。所有这些都让人感觉很笨拙。
用 Rust 写这个的优雅方式是什么?
最小的工作示例
进一步参考:
- 当 Iterator::map 返回 Result::Err 时,如何停止迭代并返回错误?
- 结果实现
FromIter
。 result_flatten
:https ://doc.rust-lang.org/std/result/enum.Result.html?search=#method.flatten ,https ://github.com/rust-lang/rust/issues/70142 (我' m 使用 rustc 1.49.0-nightly (ffa2e7ae8 2020-10-24))lines()
返回Result
s: https ://doc.rust-lang.org/std/io/trait.BufRead.html#method.lines
rust - 如何在 Rust 中返回 Result 数据类型?
我有下面的代码
该largest_prime_factor
函数的作用是找到其输入中数字的最大素因子。
我将所有素因子推入primes
向量,然后返回最大的,但我不确定如何返回最大的整数。如果 .max() 函数返回错误 - 文档说它会返回 None,但是当我将 None 作为返回的可能性时,它说它不是数据类型,并且使用我的变体枚举,但是看看在文档中, None 似乎确实是枚举。那么这个函数实际上返回了什么?我是否使用?
不正确