gpt4 book ai didi

iterator - Chars 上的 flat_map 导致借用检查器错误

转载 作者:行者123 更新时间:2023-11-29 08:12:40 26 4
gpt4 key购买 nike

我正在尝试生成这样的序列: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());
^~~~~~~~~~~~~~~~~~~~~

我该如何解决这个编译器错误?

最佳答案

迭代器是惰性的,只能在被迭代对象存活时存活。 j.to_string() 是临时的,只存在于闭包中,因此闭包不能返回 j.to_string().chars()。一个简单的解决方案是在返回之前收集字符:

fn main() {
let iter = (1..).flat_map(|j| j.to_string().chars().collect::<Vec<_>>());
for i in iter {
println!("{}", i);
}
}

关于iterator - Chars 上的 flat_map 导致借用检查器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37124645/

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