为什么在功能结束时仍然借用“数据”?

用户名

rust-by- example上实现map-reduce示例后,我尝试执行相同的操作,但数据存储在另一个文件中。编译器现在告诉我,我的data变量是有'static生命的借用的,并且寿命不足。我不确定谁在借用我的“数据”,也不确定如何响应编译器的帮助。

我已经尝试添加所有类型注释,以查看是否在某个地方假设了错误的类型,但这没有帮助。如果data&'static str而不是,则使用相同的代码String

use std::{fs, thread};

fn main() {
    let data = fs::read_to_string("data.txt").unwrap();
    let chunked_data = data.split_whitespace();

    let mut children = vec![];
    for chunk in chunked_data {
        children.push(thread::spawn(move || -> u32 {
            chunk.chars().map(|c| c.to_digit(10).unwrap()).sum()
        }));
    }

    let mut sums = vec![];
    for child in children {
        let sum = child.join().unwrap();
        sums.push(sum);
    }

    let res = sums.iter().sum::<u32>();
    println!("{}", res);
}
error[E0597]: `data` does not live long enough
  --> src/main.rs:5:24
   |
5  |     let chunked_data = data.split_whitespace();
   |                        ^^^^-------------------
   |                        |
   |                        borrowed value does not live long enough
   |                        argument requires that `data` is borrowed for `'static`
...
22 | }
   | - `data` dropped here while still borrowed

我确信这个问题很容易解决,但是我似乎找不到谁在借我的data

莱杰兹

split_whitespace方法在&strs上运行,这是由于move循环中闭合而引起的问题一个快速的解决方法是对owner进行操作String

for chunk in chunked_data.map(|chunk| chunk.to_owned())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

功能结束时单击按钮

为什么等待延迟在功能范围结束时结束

如何在继续之前在功能结束时添加暂停

确保承诺不会在异步功能结束时泄漏

为什么动画功能在动画结束时隐藏另一个div?

如何始终在功能结束时运行清理?

Rust无法识别借用在循环结束时结束

我发现自己在大多数功能结束时都会反转蓄能器。我怎么停下来

为什么 dockerized zap 在基线扫描结束时挂起?

在asynctask结束时执行功能

在游戏结束时存储数据 Unity

为什么在 retryWhen 计时器结束时使用 take(1)?

为什么我的成员变量在每次循环迭代结束时消失?

C++ 为什么结构对象值在循环结束时重置回零

为什么在rpgle程序结束时打开* inlr(最后记录指示符)

为什么LayerA和LayerB结束时不制作动画,所以在Framerjs中拖动

理解为什么在开始和结束时用元音查询城市不起作用

为什么我们在每次回溯迭代结束时从列表中弹出?

为什么我不能在每个 epoch 结束时执行验证测试?

为什么我的代码在测验结束时不显示分数?

为什么我仍然有警告:期望在云函数中的异步箭头函数结束时返回一个值,即使我已经返回了一个承诺?

在功能结束处重复功能

如何在 div 滚动结束时触发功能

仅在tap结束时触发JS功能

为什么这个easyOutCubic在开始时返回较大的变化跳跃,而在结束时返回较小的跳跃?

为什么Thread和Task的逻辑结束时间相等?

当返回对范围外的值的可变引用的不可变引用时,为什么在范围结束时丢弃了可变引用?

为什么存储在对象中的函数在运行结束时在控制台中返回未定义?

为什么不在LinkedList中保留最后一个节点指针以减少结束时的插入?