Rust语言入门小结(第2篇)

主要是Rust语言圣经学习的小结,供参考

基本概念

// Rust 程序入口函数,跟其它语言一样,都是 main,该函数目前无返回值
fn main() {
   
    // 使用let来声明变量,进行绑定,a是不可变的
    // 此处没有指定a的类型,编译器会默认根据a的值为a推断类型:i32,有符号32位整数
    // 语句的末尾必须以分号结尾
    let a = 10;
    // 主动指定b的类型为i32
    let b: i32 = 20;
    // 这里有两点值得注意:
    // 1. 可以在数值中带上类型:30i32表示数值是30,类型是i32
    // 2. c是可变的,mut是mutable的缩写
    let mut c = 30i32;
    // 还能在数值和类型中间添加一个下划线,让可读性更好
    let d = 30_i32;
    // 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
    let e = add(add(a, b), add(c, d));

    // println!是宏调用,看起来像是函数但是它返回的是宏定义的代码块
    // 该函数将指定的格式化字符串输出到标准输出中(控制台)
    // {}是占位符,在具体执行过程中,会把e的值代入进来
    println!("( a + b ) + ( c + d ) = {}", e);
}

// 定义一个函数,输入两个i32类型的32位有符号整数,返回它们的和
fn add(i: i32, j: i32) -> i32 {
   
    // 返回相加值,这里可以省略return
    i + j
}

变量可变性

  1. 其他大多数语言,要么只支持声明可变的变量,要么只支持声明不可变的变量;Rust两者都要,既要灵活,又要安全。
  2. 默认不可变,让代码安全,性能更好。
  3. 通过mut让变量变为可变。
  4. 常量与不可变变量,常量用const修饰。

变量绑定

  1. 例如let a = "hello world",变量绑定不同与其他语言的变量赋值,是与Rust的内存管理方法相关的。
  2. 绑定可有较复杂的形式,如解构,let (a, mut b):(bool, bool)=(true,false);
  3. 变量遮蔽,一方面类似于C&C++或Python中的变量作用域;另一方面,不同类型的变量可以同名;

基本类型

  1. Rust一般能自动推导出变量类型,因此可省略类型,但能力有边界,如let guess = "42".parse().expect("Not a number!"); 需要明确指定,"42".parse::<i32>let guess: i32 = ...
  2. 字符、布尔、单元类型。单元是(),这是main()、println!()等函数的返回值。

语句与表达式

Rust语言区分语句与表达式。表达式不能含分号;表达式一旦加上分号,就会变成语句,不会返回值。

fn add_with_extra(x: i32, y: i32) -> i32 {
   
    let x = x + 1; // 语句
    let y = y + 5; // 语句
    x + y // 表达式
}

函数

Rust是强类型语言,每个函数参数都要明确标出具体类型。
函数可使用表达式或return作为返回值。
特殊函数:返回()的函数,永不返回发散函数,

fn forever() -> ! {
   
  loop {
   
    //...
  };
}

所有权

计算机语言内存管理的三种方式:自动回收、手动管理、所有权管理。
我粗略地理解,Rust语言将基本数据类型及其组合,放在栈上管理,不存在所有权转移,执行浅拷贝,这样的变量称为有Copy的特征,“一个旧的变量在被赋值给其他变量后仍然可用”;而对于堆上的变量,则有所有权规则;对于堆上的变量,Rust语言的绑定右值类似于Python的浅拷贝,同时使得左值失效,又有移动的内涵。

相关推荐

  1. Rust语言入门小结2

    2024-02-09 16:06:01       36 阅读
  2. Rust语言入门小结1

    2024-02-09 16:06:01       30 阅读
  3. Rust语言入门3

    2024-02-09 16:06:01       30 阅读
  4. rust语言学习入门

    2024-02-09 16:06:01       14 阅读
  5. Rust入门2——随机数

    2024-02-09 16:06:01       33 阅读
  6. Rust入门:你好,世界

    2024-02-09 16:06:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-09 16:06:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-09 16:06:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-09 16:06:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-09 16:06:01       20 阅读

热门阅读

  1. C/C++ - 异常处理

    2024-02-09 16:06:01       26 阅读
  2. 【计算机二级考试C语言】C命令行参数

    2024-02-09 16:06:01       26 阅读
  3. 11.Swift数组

    2024-02-09 16:06:01       26 阅读
  4. DataEase

    DataEase

    2024-02-09 16:06:01      28 阅读
  5. 你好,2024——有梦就去追

    2024-02-09 16:06:01       37 阅读
  6. 多线程(一)

    2024-02-09 16:06:01       27 阅读
  7. loss的相对曲率的测量

    2024-02-09 16:06:01       32 阅读
  8. 第58讲 动态数据渲染订单查询实现

    2024-02-09 16:06:01       28 阅读