Rust中如何在match匹配中合并None与Some(0)的逻辑?
Rust 消息发送对象匹配逻辑的正确实现
要实现「None或id=0时群发,其他id时单发」的逻辑,同时避免Some(_)未覆盖的编译错误,有两种简洁的写法:
方式一:使用模式匹配的或模式(Rust 1.53+ 支持)
通过|合并相同逻辑的模式,一次性覆盖None和Some(0)的情况,剩余的Some(id)自动匹配所有非0的有效id:
match text.to_id { None | Some(0) => { // 执行群发逻辑 broadcast_message(); } Some(id) => { // 给指定id的接收者发送消息 send_to_single(id); } }
方式二:在Some分支内嵌套条件判断
如果你的Rust版本较低不支持或模式,或者希望逻辑更直观,可以在Some分支里判断id是否为0:
match text.to_id { None => broadcast_message(), Some(id) => { if id == 0 { broadcast_message(); } else { send_to_single(id); } } }
错误原因说明
之前报错Some(_) not covered,是因为匹配逻辑没有覆盖所有Option的可能分支。比如如果只单独匹配None和Some(0),就漏掉了Some(非0)的情况;而上面两种写法都完整覆盖了None、Some(0)、Some(非0)所有三种可能,编译器就不会再报错。
内容的提问来源于stack exchange,提问作者kecakisa
相关产品推荐
相关产品推荐

