You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust:match语句中转换EtherType::Arp为u16编译报错求解决

解决match语句中EtherType枚举转u16并匹配的问题

你的代码编译报错是因为Rust的match模式语法不允许在分支模式中直接使用as进行类型转换,as只能用于表达式上下文,而模式是用来匹配值结构的,不能包含这类转换操作。结合etherparse库中EtherType可转换为u16的特性,提供以下两种可行方案:

方案一:先转换为u16再匹配

先将枚举值转换为u16类型,再匹配对应枚举值的u16表示:

match deserialized_packet.payload_ether_type() {
    Some(payload_type) => {
        // 利用Into trait将EtherType转为u16
        let payload_u16: u16 = payload_type.into();
        match payload_u16 {
            // 将EtherType::Arp转为u16作为匹配值
            u16::from(EtherType::Arp) => {
                // 编写ARP包的处理逻辑
            },
            _ => continue
        }
    },
    None => continue,
}

方案二:使用匹配守卫(Match Guard)

在match分支中通过守卫条件判断转换后的值:

match deserialized_packet.payload_ether_type() {
    Some(payload_type) => match payload_type {
        // 用守卫条件判断当前枚举转u16后是否等于ARP的对应值
        t if u16::from(t) == u16::from(EtherType::Arp) => {
            // 编写ARP包的处理逻辑
        },
        _ => continue
    },
    None => continue,
}

两种方案都能实现你想要的枚举写法,其中方案一逻辑更清晰,可读性更强;方案二则无需额外变量,适合简单场景。

内容的提问来源于stack exchange,提问作者x9z78dot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:07:16