Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 返回包装在选项中的数组的迭代器_Arrays_Rust_Iterator_Lifetime_Borrow Checker - Fatal编程技术网

Arrays 返回包装在选项中的数组的迭代器

Arrays 返回包装在选项中的数组的迭代器,arrays,rust,iterator,lifetime,borrow-checker,Arrays,Rust,Iterator,Lifetime,Borrow Checker,我试图从传递给过滤器映射的闭包中返回选项中数组的数组迭代器,以便以后可以将其展平。 不幸的是,rustc产生以下错误: 无法返回引用局部变量'res'的值` 返回引用当前函数拥有的数据的值 rs(3,5):返回一个引用当前函数拥有的数据的值 main.rs(3,10):'res'在这里借用 举个简单的例子: fn演示{ 设res=[1,2]; 一些(res.into_iter()) } 尽管我正在努力实现的完整代码如下: fn生成下一个impl迭代器+'a{ 设mut计数器=1_u32; 上

我试图从传递给
过滤器映射的闭包中返回
选项中数组的数组迭代器,以便以后可以将其展平。
不幸的是,
rustc
产生以下错误:

无法返回引用局部变量'res'的值`
返回引用当前函数拥有的数据的值
rs(3,5):返回一个引用当前函数拥有的数据的值
main.rs(3,10):'res'在这里借用
举个简单的例子:

fn演示{
设res=[1,2];
一些(res.into_iter())
}
尽管我正在努力实现的完整代码如下:

fn生成下一个impl迭代器+'a{
设mut计数器=1_u32;
上一窗口(2).过滤器映射(移动窗口){
如果窗口[0]==窗口[1]{
计数器+=1;
没有一个
}否则{
设res=[计数器,窗口[0]];
计数器=1;
一些(res.into_iter())
}
}).flatte()
}
对于
某些(…)
零件,两者都会产生相同的错误

如果我理解正确,代码应该可以工作,因为
into_iter()
方法使用数组并从中生成迭代器<代码>一些
应该通过移动获得迭代器的所有权。为什么rustc认为我在这里借用
res

我也愿意使用其他方法来实现
generate\u next
函数。

对数组调用会产生与调用相同的结果,即对引用使用迭代器。这是Rust标准库中的一个不幸的问题

通过使用创建
计数器
窗口[0]
的迭代器,然后将它们组合在一起,您可以完成所需的操作:

fn生成下一个impl迭代器+'a{
设mut计数器=1_u32;
上一窗口(2)
.filter|u映射(移动|窗口|{
如果窗口[0]==窗口[1]{
计数器+=1;
没有一个
}否则{
设计数器_iter=std::iter::once(计数器);
设window_iter=std::iter::one(window[0]);
计数器=1;
一些(反熔炉链(窗口熔炉))
}
})
.flatte()
}

在较短的示例中,您希望
'a
生存期能实现什么?要求错误相同,删除这些生存期参数会产生不同的错误。回答之前可能应该检查重复。每周至少有一个这样的问题。我的实现中似乎仍有一些错误,所以我现在无法确认它是否真的有效,但这似乎是一个可能的解决方案。