在我可以 return 之前,范围就破坏了价值 (RUST)

Scopes destroy value before I can return it (RUST)

我有这段代码,它本质上需要 return 一个字符串。我正在迭代一个 JSON 响应,值(我感兴趣的字符串)在它的深处,所以我需要一个 for 循环和一个 if/else。这里的问题是这些循环的范围{}。我感兴趣的值在范围结束后立即被销毁,我需要 return 的值变为 (),因为函数 returns a Result<String, reqwest::Error>

这就是我的意思:

pub fn get_sprint() -> Result<String, reqwest::Error> {
    
    //The code to get the JSON response works fine. I store it in the variable called `get_request`. Here's the issue I am having:

    if get_request.status() == 200 {
        let resp: Response = get_request.json()?;
        for r in resp.value {
            if r.attributes.timeFrame == "current" {
                return Ok(r.name.to_string()); // THIS PLACE. I know the value is getting destroyed right after the scope ends, but I can't think of a way for it to not do that.
            }
        }

    } else {
        Ok(format!("Encountered error - {}", get_request.status().to_string()))
    }
}

当我运行上面的代码时,我得到这个:

error[E0308]: mismatched types
  --> src\getLatestSprint.rs:71:9
   |
37 |   pub fn get_sprint() -> Result<String, reqwest::Error> {
   |                          ------------------------------ expected `Result<std::string::String, reqwest::Error>` because of return type
...
71 | /         for r in resp.value {
72 | |             if r.attributes.timeFrame == "current" {
73 | |                 return Ok(r.name.to_string());
74 | |             }
75 | |         }
   | |_________^ expected enum `Result`, found `()`
   |
   = note:   expected enum `Result<std::string::String, reqwest::Error>`
           found unit type `()`

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

嗯,是的。我知道它需要一个结果,并得到了 ()。我怎样才能克服这个问题?

错误消息没有提到值被销毁。它说“你根本没有 return 任何东西”。

你没有考虑到所有的可能性:如果响应代码是 200,但负载不包含 timeFrame == "current",你的方法将 return 什么都没有。

要解决此问题,请在 for 循环后添加一个 return 语句。