我有一个结构:
pub struct Paradise {
cstream: TcpStream,
}
用一个方法:
pub fn write_message(&mut self, code: i32, message: &str) {
let foo = format!("{} {}\r\n", code, message);
let _ = self.cstream.write(foo.as_bytes());
}
这很好用。这是一个 FTP 服务器,所以当我TcpStream
从TcpListener::bind
我那里得到一个新的服务器时:
let mut p = Paradise::new(stream);
p.start();
start
在我调用的那个方法里面:
self.write_message(220, "Welcome to Paradise");
果然,我在 FTP 客户端中看到了该消息。到目前为止,一切都很好。
但后来我这样做:
let mut br = BufReader::new(&self.cstream);
loop {
let mut buffer = String::new();
let _ = br.read_line(&mut buffer);
println!("{:?}", buffer);
self.write_message(550, "Testing");
}
当我进入write_message
循环内的下一个调用时:
不能
*self
作为可变借用,因为self.cstream
也作为不可变借用 [E0502]
完整代码:
我怎样才能改变周围的东西,以便我可以write_message
在循环内调用?