将外部值传递给闭包...错误:捕获移动的值

时间:2014-11-29 12:00:49

标签: rust

我读取了一个作为参数给出的文件,但当我尝试将其传递给底部任务中的handle_client时,以便当有人连接时可以将其写入tcp流我得到{{1}我错过了什么?

error: capture of moved value: html

1 个答案:

答案 0 :(得分:6)

htmlString。就像Rust中的所有东西一样,String只在一个地方拥有(如果它满足Copy,它就能够隐式复制它,但因为它涉及堆分配,所以绝对不是)。目前,您按价值将html传递给handle_client函数;因此,当您致电handle_client(stream, html)时,streamhtml都会移入该功能,并且无法再访问。在stream的情况下,这无关紧要,因为它是循环内部的变量,但html来自循环外部;如果它允许你这样做,它会第一次使用它并且工作正常,然后它将被释放;第二次循环,你将通过一个无效的String

在这种情况下的解决方案,当你通过spawn时看到,因此无法传递引用(切片,&str)是克隆值,以便该值可以被移入prochandle_client来电:

Ok(stream) => {
    let html = html.clone();
    spawn(proc() {
        handle_client(stream, html)
    })
}