“Rust设计模式学习笔记第3节-第5节。”
学习Rust设计模式3:构造器和默认构造器
1、通常做法
Rust中,通常使用一个关联函数new来创建一个对象,通过Default trait来支持默认构造器。
2、示例
直接看下面代码:
在上面的例子中,我们为Person显式的实现了Default trait。其实对于复合类型来说,如果每个成员都实现了Default Trait,则我们可以直接使用#[derive(Default)]来实现Default,而不必显式的实现。我们可以直接在Person结构体上加上该宏来实现,如下:
学习Rust设计模式4:把集合当成智能指针
1、通常做法
通过为集合实现Deref trait,提供其拥有和借用的数据视图。
2、示例
考虑Vec,Vec是一个拥有T的集合,然后通过实现Deref完成&Vec到&[T]的隐式解引用,从而提供借用T的集合(即&[T])。
如下代码:
原因:Vec提供拥有T的集合,&[T]提供借用T的集合。大部分情况下,只需要借用视图,提供两种方式,让用户在使用时在借用和拥有之间做出选择。
学习Rust设计模式5:在析构器中做最终处理
1、通常做法:
Rust中,通常在析构函数中运行退出前必须运行的代码。
2、示例:
3、需要注意的问题:
如果函数中存在无线循环或者运行函数退出前崩溃,则不会运行drop函数。示例如下:
上述代码运行如下:
可以看到panic发生后,A的drop函数没有运行。
领取专属 10元无门槛券
私享最新 技术干货