Rust中获取枚举目标变体的惯用写法:如何避免变量重复提及
Rust枚举变体提取的惯用写法优化
你的这段代码本身完全合规,在Rust早期版本里属于处理此类场景的常规写法。不过在Rust 1.65及以上版本中,有更简洁的惯用写法可以避免via重复三次,那就是**let-else语句**:
let IpAddr::V4(via) = addr.ip() else { warn!("(unsupported) ipv6 packet from {addr}"); continue; }; // ...后续用via处理数据包...
这种写法直接在let语句中解构目标枚举变体,匹配失败时进入else块执行后续逻辑(这里是打日志并跳过当前循环),全程via只需要声明一次,代码更紧凑清晰。
如果你的项目还在使用低于1.65的Rust版本,也可以用match语句减少变量名重复:
let via = match addr.ip() { IpAddr::V4(v) => v, IpAddr::V6(_) => { warn!("(unsupported) ipv6 packet from {addr}"); continue; } };
总的来说,原写法本身并没有问题,属于Rust中忽略非目标枚举变体的常规实现方式;而let-else是现在更推荐的惯用优化写法,能让代码更简洁易读。
内容的提问来源于stack exchange,提问作者fadedbee
相关产品推荐
相关产品推荐

