我有一个看起来像这样的枚举
pub enum IpNetwork {
V4(Ipv4Network),
V6(Ipv6Network),
}
这些变体中的每一个都代表IPv4或v6 CIDR。现在,Ipv4Network
和Ipv6Network
都有一个方法来获取像这样定义的前缀
// For Ipv4Network
pub fn prefix(&self) -> u8
// For Ipv6Network
pub fn prefix(&self) -> u128
如何概括IpNetwork
枚举的前缀方法?我知道我可以将u128
作为返回类型,但这种方法是惯用的吗?
答案 0 :(得分:0)
所以你想要一个在IpNetwork
类型上运行的前缀函数,但不确定返回类型应该是什么。以下是您可以遵循的可能方法。
正如bheklilr在评论中提到的,其中一个替代方案是引入一个枚举:pub enum Prefix { V4(u8), V6(u128) }
。
根据您的使用情况,这可能是有道理的,但在这里我似乎有点矫枉过正。最后,您将最终在通用prefix
函数的结果上进行模式匹配。在这种情况下,您可以更好地对IpNetwork
对象本身进行模式匹配,并调用其对应的prefix
函数。
u128
如果您只想获取整数值而不需要区分IPV4和IPV6,则返回一个整数似乎是要走的路。 u8
可以毫无问题地投放到u128
,且开销可以忽略不计。
答案 1 :(得分:-1)
据我所知,标准库不具备通用数字类型的功能。但是,您可以为u8
和u128
定义特征并实施它。
此外,还有num箱子,基本上就是这样。