【发布时间】:2019-04-03 12:45:25
【问题描述】:
这段代码有错误:
let a: Vec<_> = (1..10).flat_map(|x| (1..x).map(|_| x)).collect();
错误信息:
error[E0597]: `x` does not live long enough
--> src/main.rs:2:57
|
2 | let a: Vec<_> = (1..10).flat_map(|x| (1..x).map(|_| x)).collect();
| --- ^- - borrowed value needs to live until here
| | ||
| | |borrowed value only lives until here
| | borrowed value does not live long enough
| capture occurs here
但是为什么呢?
Is 是原始类型,即无论如何都应该克隆它。
我理解错了什么?
【问题讨论】:
-
我不知道这是否是你真正的用例,但
1..10已经是一个迭代器。你可以写:let a: Vec<_> = (1..10).flat_map(|x| 1..x).collect(). -
@Boiethios 当然,我知道,但在这种情况下,这只是一个例子
-
反正我一开始没看懂你的代码:P
-
@Boiethios 最初我生成了元组
|y| (x,y) -
哦,那你可以用Itertools::tuple_combinations。