lpflpf

搬砖程序员带你飞

砖搬得多了,就能盖楼

Rust 编程语言 - 面向对象特质

面向对象语言特征

  1. 对象包含数据和行为

四人帮解释:面向对象的程序是由对象组成的。一个对象包含数据和操作这些数据的过程。这些过程通常被称为 方法 或 操作。 通用解释:一个对象包含了数据和对数据的操作过程,即为面向对象

Rust 编程语言 - 智能指针

智能指针起源于C++,并存在于其他语言。Rust 定义了多种不同的智能指针,并提供了多于引用的额外功能。
普通引用和智能指针:引用是一类只借用数据的指针;智能指针拥有他们指向的数据

Rust 编程语言 - 编写自动化测试

如何编写测试

  1. 需要标记注解 #[test]
  2. assert_eq 宏 和 assert_ne 宏 测试相等
  3. assert 宏自定义断言
  4. should_panic 注解预测panic
  5. 还可以通过Result<T, E> 方式测试

控制测试如何运行

  1. 默认并行测试,可以通过 --test-threads=1 指定但县城测试
  2. 显示函数输出 --show-output
  3. 可以指定运行部分测试
  4. [ignore] 注解忽略测试

测试的组织

单元测试

  1. 单元测试,在模块中,指定 [cfg(test)] 注解,可以在编译时忽略test包,加快变异,减少编译结果大小
  2. 通过子模块引用父模块的方法,测试私有函数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
pub fn add_two(a: i32) -> i32 {
    internal_adder(a, 2)
}

fn internal_adder(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    // 引入父模块的私有方法
    use super::*;

    #[test]
    fn internal() {
        assert_eq!(4, internal_adder(2, 2));
    }
}

集成测试

  1. 在src 同级创建 tests 目录,目录结构如下:
1
2
3
4
5
6
7
adder
├── Cargo.lock
├── Cargo.toml
├── src
│   └── lib.rs
└── tests
    └── integration_test.rs
  1. 可以支持多模块

Rust 编程语言 - 范型、Trait和生命周期

范型数据类型

  1. 一般使用T作为类型参数名称
  2. 适用于结构体、枚举、函数等
  3. 支持多个类型
  4. 可以限定方法实现
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
fn largest<T>(list: &[T]) -> &T {
    let mut largest = &list[0];

    for item in list {
        if item > largest {
            largest = item;
        }
    }

    largest
}

struct Point<T,U> {
    x: T,
    y: U,
}

Rust 通过单态化保证运行效率。将通用代码转化为特定代码。

0%