gpt4 book ai didi

rust - 令人困惑的错误消息? (解包运算符)

转载 作者:行者123 更新时间:2023-12-05 09:26:04 24 4
gpt4 key购买 nike

我有这个 rust 方法错误消息:

error[E0277]: the `?` operator can only be used on `Option`s,
not `Result`s, in an async function that returns `Option`

我必须承认,我经常遇到 Rust 错误消息,这些消息让我感到困惑,而对于大多数其他编码人员来说,它们绝对有意义。

因此,对于发布此问题,我提前表示歉意。

首先:错误消息中的第二个逗号是什么意思?我应该这样读吗:

“如果异步函数调用 [在另一个函数内] 返回类型为 Result 的枚举,则只能应用 ? 运算符如果,并且仅当相应的 [other] 函数也返回 Result 类型的枚举而不是 Option 类型的枚举时”

请原谅我冗长的语言。我希望我明白我的意思。

同样让我感到困惑的是带有相同引用的错误消息,即 error[E0277] ,它列在 official rust error codes index 中。 , 状态:

“您尝试使用一种类型,但它没有在需要该特征的地方实现某些特征。”

除了相同的引用编号外,这两个错误消息在哪个宇宙中有任何共同点?

这是 Rust 生成的整个错误 block :

error[E0277]: the `?` operator can only be used on `Option`s, not `Result`s, in an async function that returns `Option`
--> src/utils/tokenizer.rs:72:73
|
70 | pub async fn clear(&self) -> Option<String> {
| _________________________________________________-
71 | | let mut conn = self.pool.get().await.unwrap();
72 | | let mut iter: redis::AsyncIter<i32> = conn.sscan("my_set").await?;
| | ^ use `.ok()?` if you want to discard the `Result<Infallible, Red
Error>` error information
73 | | while let Some(element) = iter.next_item().await {
... |
79 | | Some(String::from("A"))
80 | | }
| |_____- this function returns an `Option`
|
= help: the trait `FromResidual<Result<Infallible, RedisError>>` is not implemented for `std::option::Option<std::string::String>`
= help: the following other types implement trait `FromResidual<R>`:
<std::option::Option<T> as FromResidual<Yeet<()>>>
<std::option::Option<T> as FromResidual>

For more information about this error, try `rustc --explain E0277`.

什么是规范错误消息,来自错误代码索引页的错误消息还是编译器生成的错误消息?

最佳答案

你的函数 clear返回 Option<String>但是函数 conn.sscan("my_set").await?;返回结果。您不能使用 ?传播结果,因为它与 clear(&self) -> Option<String> 的返回类型不匹配.

您需要明确处理 Result或将其转换为 Option<String> .您也可以尝试添加 .ok()?根据编译器提示,看看能得到什么。

无论您选择什么,重要的是确保返回类型与您的 ? 匹配运算符正在展开。

关于rust - 令人困惑的错误消息? (解包运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74534896/

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