在我可以 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
语句。
我有这段代码,它本质上需要 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
语句。