types - 是否可以匹配 Option<Vec<T>>?

标签 types rust match

我无法理解如何迭代 VecOption 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/

相关文章:

scala - Scala 是强类型的吗?

typescript - 在 TypeScript 中定义类型安全的通用对象访问器函数

generics - Scala 递归泛型 : Parent[Child] and Child[Parent]

regex - 在成功/失败之前查找正则表达式在字符串中查看了多少个字符

objective-c - objective-c :componentsSeperatedByRegex

Javascript 正则表达式匹配字符串中的一种模式但排除另一种模式

C++ 隐式数字类型降级

methods - 如何在 HashMap 中存储方法指针并调用它们

rust - 使用 as_slice() 时为 "borrowed value does not live long enough"

asynchronous - 为什么在结果上使用匹配语句会出现 "expected type Future"错误?