文章目录
- Rust动态数组存放不同类型元素
- 前言
- 1.1 使用枚举类型实现
- 1.2 通过特征对象实现
Rust动态数组存放不同类型元素
前言
- Vec<T>动态数组类型,是rust的基本集合类型,他只能存放同类型的元素。
如 vec![1, 2, 5, 18],但是如果vec![1, 28, “xwp”, ‘c’]这种就会报错。 - 要实现存放不同类型元素,可以通过枚举类型或者特征对象来实现
- 建议使用特征对象,因为特征对象更加灵活而且可以动态增加类型
1.1 使用枚举类型实现
这里需要在一个Vec中存放两种类型数据,ipv4和ipv6
// 1.枚举类型实现
#[derive(Debug)]
enum IpAddr {V4(String),V6(String),
}
fn main() {let ipadrs = vec![IpAddr::V4("127.0.0.1".to_string()),IpAddr::V6("::1".to_string()),];for ip in ipadrs {show_addr(ip);}
}
fn show_addr(ip: IpAddr) {println!("{:?}", ip);
}
1.2 通过特征对象实现
// 2.通过特征对象实现
trait IpAddr {fn show_addr(&self);
}
struct V4(String);
impl IpAddr for V4 {fn show_addr(&self) {println!("{}", self.0);}
}
struct V6(String);
impl IpAddr for V6 {fn show_addr(&self) {println!("{}", self.0);}
}
fn main() {let ips: Vec<Box<dyn IpAddr>> = vec![Box::new(V4("127.0.0.1".to_string())),Box::new(V6("::1".to_string())),];for ip in ips {ip.show_addr();}
}