gpt4 book ai didi

rust - 为什么我会收到有关非详尽模式的错误消息?

转载 作者:行者123 更新时间:2023-11-29 07:47:45 25 4
gpt4 key购买 nike

我正在使用 mio 编写聊天服务器(0.5.1),关注 this tutorial .有了它,我编写了以下处理程序:

const SERVER_TOKEN: Token = Token(0);

impl Handler for WebSocketServer {
type Timeout = usize;
type Message = ();

fn ready(&mut self, event_loop: &mut EventLoop<WebSocketServer>,
token: Token, events: EventSet)
{
match token {
SERVER_TOKEN => {
let client_socket = match self.socket.accept() {
Err(e) => {
println!("Accept error: {}", e);
return;
},
Ok(None) => unreachable!("Accept has returned 'None'"),
Ok(Some((sock, addr))) => sock,
};

self.token_counter += 1;
let new_token = Token(self.token_counter);

self.clients.insert(new_token, client_socket);
event_loop.register(&self.clients[&new_token],
new_token, EventSet::readable(),
PollOpt::edge() | PollOpt::oneshot()).unwrap();
}
}
}
}

但是,在尝试编译它时出现错误:

error[E0004]: non-exhaustive patterns: `Token(_)` not covered
--> src/main.rs:23:15
|
23 | match token {
| ^^^^^ pattern `Token(_)` not covered

error: aborting due to previous error

虽然我明白这应该意味着我的匹配 没有涵盖所有可能的情况,但我不明白这是怎么回事。

为什么会出现此错误,我该如何解决?

最佳答案

这里的SERVER_TOKEN是一个等于Token(0)的常量,所以让我们简化匹配:

match token {
Token(0) => { },
}

虽然知道您不会获得任何其他标记,但编译器不知道,并且该类型允许其他值,如Token(1)。您可以添加一个案例来涵盖其他案例,并且只是 panic。我喜欢打印出匹配的内容作为调试辅助工具。

match token {
SERVER_TOKEN => { },
x => panic!("Unexpected invalid token {:?}", x),
}

这假设 Token 实现了 Debug

关于rust - 为什么我会收到有关非详尽模式的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41037114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com