gpt4 book ai didi

rust - 当迭代器使用容器时,是否可以从循环中返回容器?

转载 作者:行者123 更新时间:2023-11-29 08:23:49 27 4
gpt4 key购买 nike

我有一个指向 BufReader 的迭代器,我想返回一个 BufReader。这个例子很简单,只用return就可以了,但是真正的代码结构比较复杂,return是不合适的:

fn f() -> Result<Vec<i32>, &'static str> {
let ret = vec![1, 2, 3];

for i in ret.iter() {
if *i == 2 {
return Ok(ret);
}
}
Err("no element")
}

编译错误:

error[E0505]: cannot move out of `ret` because it is borrowed
|
11 | for i in ret.iter() {
| --- borrow of `ret` occurs here
12 | if *i == 2 {
13 | return Ok(ret);
| ^^^ move out of `ret` occurs here

如果所有引用都是本地的,为什么这是一个错误?引用仍然存在真的很重要吗?

最佳答案

目前 borrowchecker 不支持这个,但无论如何它都不是惯用的。惯用的解决方案是

if ret.contains(&2) {
return Ok(ret);
}

因为您的实际代码是 BufReader,我假设您指的是 bytes 返回的迭代器方法。在这种情况下,惯用的解决方案将改为以下内容的变体。

if ret.bytes().any(|b| b == Ok(2)) {
return Ok(ret);
}

关于rust - 当迭代器使用容器时,是否可以从循环中返回容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42764707/

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