推广枚举的函数

时间:2017-04-10 16:58:06

标签: enums rust

我有一个看起来像这样的枚举

pub enum IpNetwork {
    V4(Ipv4Network),
    V6(Ipv6Network),
}

这些变体中的每一个都代表IPv4或v6 CIDR。现在,Ipv4NetworkIpv6Network都有一个方法来获取像这样定义的前缀

// For Ipv4Network
pub fn prefix(&self) -> u8
// For Ipv6Network
pub fn prefix(&self) -> u128

如何概括IpNetwork枚举的前缀方法?我知道我可以将u128作为返回类型,但这种方法是惯用的吗?

2 个答案:

答案 0 :(得分:0)

所以你想要一个在IpNetwork类型上运行的前缀函数,但不确定返回类型应该是什么。以下是您可以遵循的可能方法。

反对使用枚举

的论点

正如bheklilr在评论中提到的,其中一个替代方案是引入一个枚举:pub enum Prefix { V4(u8), V6(u128) }

根据您的使用情况,这可能是有道理的,但在这里我似乎有点矫枉过正。最后,您将最终在通用prefix函数的结果上进行模式匹配。在这种情况下,您可以更好地对IpNetwork对象本身进行模式匹配,并调用其对应的prefix函数。

u128

的情况

如果您只想获取整数值而不需要区分IPV4和IPV6,则返回一个整数似乎是要走的路。 u8可以毫无问题地投放到u128,且开销可以忽略不计。

答案 1 :(得分:-1)

据我所知,标准库不具备通用数字类型的功能。但是,您可以为u8u128定义特征并实施它。 此外,还有num箱子,基本上就是这样。