【发布时间】:2016-09-04 14:41:37
【问题描述】:
我正在尝试生成这样的序列:1,2,3,4,5,6,7,8,9,1,0,1,1,1,2...
fn main() {
let iter = (1..).flat_map(|j| j.to_string().chars());
for i in iter {
println!("{}", i);
}
}
这不起作用,因为j.to_string() 超出了我认为的范围(但为什么?)
p040.rs:2:35: 2:48 error: borrowed value does not live long enough
p040.rs:2 let iter = (1..).flat_map(|j| j.to_string().chars());
^~~~~~~~~~~~~
p040.rs:2:58: 6:2 note: reference must be valid for the block suffix following statement 0 at 2:57...
p040.rs:2 let iter = (1..).flat_map(|j| j.to_string().chars());
p040.rs:3 for i in iter {
p040.rs:4 println!("{}", i);
p040.rs:5 }
p040.rs:6 }
p040.rs:2:35: 2:56 note: ...but borrowed value is only valid for the block at 2:34
p040.rs:2 let iter = (1..).flat_map(|j| j.to_string().chars());
^~~~~~~~~~~~~~~~~~~~~
我该如何解决这个编译器错误?
【问题讨论】:
-
在 C++ 程序中引用像这样的临时文件是我发现的最常见的错误之一。它通常持续足够长的时间以通过测试,直到编译器更新或有人将新变量添加到本地范围。很高兴它为你抓住了这个。