共享篋:程序代码解释

学习内容

  • 学习和理解关键词trait开发过程

篇目

  1. 项目共享篋程序结构示意图
  2. 程序代码解释
  3. 理解关键词traitimpl关系
  4. 题外话
  5. 标准库平等比较特质PartialEq
  6. 参考资料

项目共享篋程序结构示意图

  下面示意图是共享篋trait_exerci程序的结构。该共享篋提供了对外三个衔接通道:两个特质TraitCanalTraitKanal以及一个类型的自我实现StructType

image

程序代码解释

  通过下面代码,实现了如下内容:

  • 结构类型StructType进行了自我实现;
  • 针对结构类型StructType,定义了两个特质TraitCanalTraitKanal
  • 对于结构类型StructType,实现了两个特质TraitCanalTraitKanal
#[derive(Debug, PartialEq, Default)]
pub struct StructType {
    data: u32,
}

pub trait TraitCanal {
    fn get_data(&self) -> u32;
}

pub trait TraitKanal {
    fn set_data(&mut self, data: &u32);
}

impl TraitCanal for StructType {
    fn get_data(&self) -> u32 {
        self.data
    }
}

impl TraitKanal for StructType {
    fn set_data(&mut self, data: &u32) {
        self.data = *data;
    }
}

// impl AllTrait for StructType {
impl StructType {
    pub fn new(data: u32) -> StructType {
        dbg!("impl StructType: new");
        StructType { data: data }
    }

    pub fn get_data_for_all(&self) -> u32 {
        self.data
    }

    pub fn set_data_for_all(&mut self, data: &u32) {
        self.data = *data;
    }
}

  结构类型StructType自我实现,包含了一个函数new()和两个方法get_data_for_all()set_data_for_all()

  针对一个结构类型StructType,定义且实现了两个不同的特质TraitCanalTraitKanal。特质TraitCanal包含一个方法get_data(),而特质TraitKanal包含一个方法set_data()

理解关键词traitimpl关系

  针对一个结构类型StructType实例,可以存在不同的特质,只要把这些特质在一起使用,这些不同特质实现的函数和方法是可以相通的。

  任何结构类型StructType的特质实现,都可以使用结构类型StructType自我实现的函数和方法。

题外话

标准库平等比较特质PartialEq

  标准库平等比较特质PartialEq,可以比较类型的实例以检查它们是否相等。

#[derive(Default, Debug, PartialEq)]
pub struct Person {
    name: String,
    age: u32,
}

fn main() {
    assert_eq!(
        Person::default(),
        Person {
            name: String::new(),
            age: 0
        }
    );
}

参考资料