共享篋:程序代码解释
学习内容
- 学习和理解关键词
trait
开发过程
篇目
项目共享篋程序结构示意图
下面示意图是共享篋trait_exerci
程序的结构。该共享篋提供了对外三个衔接通道:两个特质TraitCanal
和TraitKanal
以及一个类型的自我实现StructType
。
程序代码解释
通过下面代码,实现了如下内容:
- 结构类型
StructType
进行了自我实现; - 针对结构类型
StructType
,定义了两个特质TraitCanal
和TraitKanal
; - 对于结构类型
StructType
,实现了两个特质TraitCanal
和TraitKanal
;
#[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
,定义且实现了两个不同的特质TraitCanal
和TraitKanal
。特质TraitCanal
包含一个方法get_data()
,而特质TraitKanal
包含一个方法set_data()
。
理解关键词trait
和impl
关系
针对一个结构类型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 } ); }