我有这样一个有效的代码:

/* Ignore IPv6. */
let via = if let IpAddr::V4(via) = addr.ip() {
    via
} else {
    warn!("(unsupported) ipv6 packet from ${addr}");
    continue // abandon this packet and try the next packet
};

// ...process this packet with "via: Ipv4Addr" in scope...

有没有一种惯用的方法可以从枚举中取出想要的变体,而不会三次提到via

或者,这是我应该忽略Rust中不想要的变体的方式吗?

推荐答案

您可以使用let-else,因为else分支是分支(continue):

/* Ignore IPv6. */
let IpAddr::V4(via) = addr.ip() else {
    warn!("(unsupported) ipv6 packet from ${addr}");
    continue // abandon this packet and try the next packet
};

// ...process this packet with "via: Ipv4Addr" in scope...

Rust相关问答推荐

如何在rust中有条件地分配变量?

在HashMap中插入Vacant条目的可变借位问题

将内部类型作为参数的泛型 struct 上的方法

如何找到一个数字在二维数组中的位置(S)?

Rust TcpStream不能在读取后写入,但可以在不读取的情况下写入.为什么?

是否可以使用Rust宏来构建元组的项?

考虑到Rust不允许多个可变引用,类似PyTorch的自动区分如何在Rust中工作?

Rust wasm 中的 Closure::new 和 Closure::wrap 有什么区别

为什么我必须使用 PhantomData?在这种情况下它在做什么?

Const 上下文:从 init 函数创建具有 const 通用长度的数组

Rust中的一生语法有什么作用?

Rust 为什么被视为borrow ?

Rust中是否可以在不复制的情况下从另一个不可变向量创建不可变向量?

在 Rust 中,我如何处理请求 javascript 的页面?

Rust 中的方法调用有什么区别?

在异步 Rust 中,Future 如何确保它只调用最近的 Waker?

如何在 use_effect_with_deps 中设置监听器内的状态?

TcpStream::connect - 匹配武器具有不兼容的类型

tokio async rust 的 yield 是什么意思?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?