Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Rust echo服务器中删除不必要的功能_Rust - Fatal编程技术网

从Rust echo服务器中删除不必要的功能

从Rust echo服务器中删除不必要的功能,rust,Rust,此代码: use std::io::{TcpListener, TcpStream}; use std::io::{Acceptor, Listener}; fn main() { let listener = TcpListener::bind("127.0.0.1", 5555); // bind the listener to the specified address let mut acceptor = listener.listen(); //

此代码:

use std::io::{TcpListener, TcpStream};
use std::io::{Acceptor, Listener};

fn main() {
    let listener = TcpListener::bind("127.0.0.1", 5555);

    // bind the listener to the specified address
    let mut acceptor = listener.listen();

    // accept connections and process them, spawning a new tasks for each one
    for stream in acceptor.incoming() {
        match stream {
            Err(e) => { /* connection failed */ }
            Ok(stream) => {
                // connection succeeded
                spawn(proc() {
                    let mut buf: [u8, ..1024] = [0, ..1024];
                    loop {
                        let len = stream.read(buf);
                        let _ = stream.write(buf.slice(0, len.unwrap()));
                    }
                })
            }
        }
    }
}
在以下情况下失败:

    Compiling chat v0.1.0 (file:///home/chris/rust/chat)
src/chat.rs:19:35: 19:41 error: cannot borrow immutable captured outer variable in a proc `stream` as mutable
src/chat.rs:19                         let len = stream.read(buf);
                                                 ^~~~~~
src/chat.rs:20:25: 20:31 error: cannot borrow immutable captured outer variable in a proc `stream` as mutable
src/chat.rs:20                         stream.write(buf.slice(0, len.unwrap()));
                                       ^~~~~~
error: aborting due to 2 previous errors
Could not compile `chat`.
但如果我将代码更改为:

                spawn(proc() {
                    fn handle(mut stream: TcpStream) {
                        let mut buf: [u8, ..1024] = [0, ..1024];
                        loop {
                            let len = stream.read(buf);
                            let _ = stream.write(buf.slice(0, len.unwrap()));
                        }
                    }
                    handle(stream);
                })
它起作用了


有没有办法删除此
句柄
函数?

代码中的难点在于您的模式。当你写这样的东西时:

match foo.bar() {
    Some(value) => { ... },
    _ => {}
}
您正在声明一个新变量(
value
,在我的示例中)并将选项的内容移动到其中。这实际上相当于:

let value = foo.bar().unwrap();
所以在这种情况下,没有什么禁止声明它是可变的

match foo.bar() {
    Some(mut value) => { ... },
    _ => {}
}

Ok(stream)
更改为
Ok(mut stream)
。谢谢@Levans-回答这个问题,我会接受的。