在python中,我可能有这样一个类:
class ClientObject(object):
def __init__(self):
connection = None
connected = False
def connect(self):
self.connection = new Connection('server')
self.connected = True
def disconnect(self):
self.connection.close()
self.connection = None
self.connected = False
我正在try 做类似的事情.首先,我怀疑这在rust中是否是一个好模式——您会用这种方式实现一个具有连接的客户机类吗?第二,我在实现中遇到了一个我不理解的错误.
pub struct Client {
seq: int,
connected: bool,
socket: Option<UdpSocket>
}
impl Client {
pub fn connect(&mut self, addr: &SocketAddr) -> ClientConnectionResult {
match self.socket {
Some(_) => self.disconnect(),
None => ()
};
self.socket = match UdpSocket::bind(*addr) {
Ok(s) => Some(s),
Err(e) => return Err(to_client_error(e))
};
self.connected = true;
Ok(())
}
pub fn disconnect(&mut self) {
match self.socket {
None => (),
Some(s) => drop(s)
};
self.socket = None;
self.connected = false;
}
}
在disconnect函数中,匹配会生成一个编译错误,因为它试图移动self的所有权.插座我想做的是让自己.socket设置为None,并允许在调用connect时将其重新分配给某个对象.我该怎么做?