Trait(特征)derive(起源)编译器可以使用#[derive]属性提供一些trait的基本实现。声明属性后的trait实现,依然可以自己重新方法。
The following is a list of derivable traits:
Comparison traits: Eq, PartialEq, Ord, PartialOrd.
Clone, to create T f...
match和deconstructuring解构
match和解构(destructuring)tuple123456789let pair = (0, -2);println!("Tell me about {:?}", pair);match pair { (0, y) => println!("First is `0` and `y` is `{:?}...
iterator
iteratoriterator trait主要是为了for循环使用而设计。for循环默认使用into_iter()
into_iter, iter and iter_mut
iter: borrow each element
into_iter: cousumes the collection
iter_mut: mutably borrows each element of the co...
closure闭包
闭包closure捕获变量闭包捕获变量采用了非常灵活的推导,可以根据需要,捕获外部变量的三种形式&T(borrow default)/&mut T(mut borrow)/T(move)
12345678910111213141516171819fn main() { let greeting = "hello"; let mut f...
macro宏
宏和函数的区别
宏可以接收可变的参数
宏定义必须在调用前
声明宏典型的例子是vec!,声明宏是基于match来完成,语法也非常相似
程序宏必须单独的package中声明。参数是代码,所以更加灵活,功能更加强大;通常要配合syn和quote两个crate来解析代码和生成代码。
rust没有反射功能,可以通过程序宏定义来实现功能。 AOP可以通过声明宏实现
lifetime生命周期
lifetime生命周期一个变量的声明周期从它被声明时开始,直到它被销毁结束。声明周期是编译器用来保证所有borrow可用的一个构造。
functionrust使用显示声明,来确定一个引用的声明周期。fn foo<’a, ‘b>,表示foo函数的声明周期,不能超过’a,’b中的任何一个。
如果不考虑省略形式,函数的声明至少要满足几个约束
任何的引用,必须声明一个生命周期。
...
auto_test
11 编写自动测试rust中的测试,分为单元测试和集成测试;
rust nightly add Benchmark test
document comment as test
11.1 如何编写测试一个测试函数通常包含三个部分
准备数据
执行要测试的函数
断言返回内容是否和期待的一致
解剖测试函数简单来说,一个测试函数,就是一个带有test属性的函数。当我们执行cargo test的...
前端设计综述
1. 架构模式的变迁架构模式
mvc
mvp
wpf
mvvm
1.2 工具和框架
jquery/dojo
angular
react
vue
2. 设计语言针对企业应用,狭义定义来说,设计语言就是针对企业应用的一套UI设计处理规则;通过统一的处理规则,来达到应用在编写、展现、交互等方面的风格统一。
2.1 material designGoogle Android material
...
Modules
7 Package(包), Crates(箱) and Modules(模块)7.1 package and create当我们使用cargo new my-project命令创建一个工程的时候,我们创建了一个package。package包含一个cargo.toml文件
crate是rust编译的入口。 A crate is a binary or librarypackage至少要包含一...
enum
6 EnumEnums allow you to define a type by enumerating its possible variants.
6.1 define and use12345enum IpAddrKind { V4, V6,}let four = IpAddrKind::V4;
rust中的enum可以接收不通类型的参数
1234enum Ip...