从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-回答这个问题,我会接受的。