我读取了一个作为参数给出的文件,但当我尝试将其传递给底部任务中的handle_client
时,以便当有人连接时可以将其写入tcp流我得到{{1}我错过了什么?
error: capture of moved value: html
答案 0 :(得分:6)
html
是String
。就像Rust中的所有东西一样,String
只在一个地方拥有(如果它满足Copy
,它就能够隐式复制它,但因为它涉及堆分配,所以绝对不是)。目前,您按价值将html
传递给handle_client
函数;因此,当您致电handle_client(stream, html)
时,stream
和html
都会移入该功能,并且无法再访问。在stream
的情况下,这无关紧要,因为它是循环内部的变量,但html
来自循环外部;如果它允许你这样做,它会第一次使用它并且工作正常,然后它将被释放;第二次循环,你将通过一个无效的String
。
在这种情况下的解决方案,当你通过spawn
时看到,因此无法传递引用(切片,&str
)是克隆值,以便该值可以被移入proc
和handle_client
来电:
Ok(stream) => {
let html = html.clone();
spawn(proc() {
handle_client(stream, html)
})
}