是否可以匹配Option <vec <t>&gt;?

时间:2016-09-07 10:44:27

标签: types rust match

我未能理解如何迭代Vec OptionDisplay并仅在符合特定条件时才采取行动。

具体来说,我正在开发一个网络应用程序,我希望迭代网络接口(IPv4或IPv6)的所有可能IP地址,并且只对v4地址执行某些操作。在这种情况下,我想打印它们,所以我知道我必须实现Debug

使用Some([V6(fe80::6a5b:35ff:fec7:5eeb), V4(10.0.11.241)]) 格式化程序打印我的值,我得到:

Option<Vec<std::net::IpAddr>>

这是V4。我想迭代向量并通过Display实现打印我遇到的每个pub enum IpAddr { V4(Ipv4Addr), V6(Ipv6Addr), } 地址。

请注意,std::net::IpAddr定义为

V4

如何匹配类型的枚举(仅在我的情况下为jit)?

1 个答案:

答案 0 :(得分:3)

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部分: