在rust中实现对数据和方法实现的封装,主要是利用rust中的struct和枚举类型来实现对数据的封装,利用impl代码块来实现对struct和枚举类型中方法的封装。
下面给出利用struct和impl实现封装的示例代码:
pub struct AveragedCollection {
list: Vec<i32>,
average: f64,
}
impl AveragedCollection {
pub fn add(&mut self, value: i32) {
self.list.push(value);
self.update_average();
}
pub fn remove(&mut self) -> Option<i32> {
let result = self.list.pop();
match result {
Some(value) => {
self.update_average();
Some(value)
}
None => None,
}
}
fn update_average(&mut self) {
let total: i32 = self.list.iter().sum();
self.average = total as f64 / self.list.len() as f64;
}
pub fn average(&self) -> f64 {
return self.average
}
}
我们实现了一个AverageCollection的struct,在其内部有一个list属性用来存储数据,同时有一个average属性用来计算对应list中的数据的平均值,同时利用impl块,来实现对struct内部数据进行操作的方法,避免直接把内部数据,也就是实现细节直接暴露出来,实现封装的目的。