我无法理解如何迭代 Vec
的 Option
s 并仅在满足元素类型的特定条件时才采取行动。
具体来说,我正在开发一个网络应用程序,我想在其中迭代网络接口(interface)(IPv4 或 IPv6)的所有可能的 IP 地址,并且只对 v4 地址执行某些操作。在这种情况下,我想打印它们,所以我知道我必须执行 Display
.
用 Debug
打印我的值格式化程序,我得到:
Some([V6(fe80::6a5b:35ff:fec7:5eeb), V4(10.0.11.241)])
这是一个Option<Vec<std::net::IpAddr>>
.我想遍历向量并打印每个 V4
我通过 Display
遇到的地址实现。
请注意 std::net::IpAddr
定义为
pub enum IpAddr {
V4(Ipv4Addr),
V6(Ipv6Addr),
}
如何匹配枚举类型(V4
仅适用于我的情况)?
最佳答案
use std::net::IpAddr;
fn printer(addrs: Option<Vec<IpAddr>>) {
if let Some(addrs) = addrs {
for addr in addrs {
if let IpAddr::V4(v4_addr) = addr {
println!("{}", v4_addr)
}
}
}
}
有关详细信息,请参阅 The Rust Programming Language部分:
关于types - 是否可以匹配 Option<Vec<T>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39367754/