深入理解Rust语句和表达式


  团队博客: 汽车电子社区


一、概述

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

  语句会执行一些操作但是不会返回一个值,而表达式会在求值后返回一个值,因此在上述函数体的三行代码中,前两行是语句,最后一行是表达式。

二、语句

let a = 8;
let b: Vec<f64> = Vec::new();
let (a, c) = ("hi", false);

  以上都是语句,它们完成了一个具体的操作,但是并没有返回值,因此是语句。
  由于 let 是语句,因此不能将 let 语句赋值给其它值,如下形式是错误的:

let b = (let a = 8);

三、表达式

  表达式会进行求值,然后返回一个值。例如 5 + 6,在求值后,返回值 11,因此它就是一条表达式。
  表达式可以成为语句的一部分,例如 let y = 6 中,6 就是一个表达式,它在求值后返回一个值 6(有些反直觉,但是确实是表达式)。
  调用一个函数是表达式,因为会返回一个值,调用宏也是表达式,用花括号包裹最终返回一个值的语句块也是表达式,总之,能返回值,它就是表达式:

fn main() {
   
    let y = {
   
        let x = 3;
        x + 1
    };

    println!("The value of y is: {}", y);
}

  上面使用一个语句块表达式将值赋给 y 变量,语句块长这样:

{
   
    let x = 3;
    x + 1
}

  该语句块是表达式的原因是:它的最后一行是表达式,返回了 x + 1 的值,注意 x + 1 不能以分号结尾,否则就会从表达式变成语句, 表达式不能包含分号。这一点非常重要,一旦你在表达式后加上分号,它就会变成一条语句,再也不会返回一个值,请牢记!
  最后,表达式如果不返回任何值,会隐式地返回一个 () 。

fn main() {
   
    assert_eq!(ret_unit_type(), ())
}

fn ret_unit_type() {
   
    let x = 1;
    // if 语句块也是一个表达式,因此可以用于赋值,也可以直接返回
    // 类似三元运算符,在Rust里我们可以这样写
    let y = if x % 2 == 1 {
   
        "odd"
    } else {
   
        "even"
    };
    // 或者写成一行
    let z = if x % 2 == 1 {
    "odd" } else {
    "even" };
}

相关推荐

  1. 深入理解Rust语句表达式

    2024-01-23 10:54:01       37 阅读
  2. Rust字符串深入理解

    2024-01-23 10:54:01       17 阅读
  3. 深入理解 C++ Lambda 表达式

    2024-01-23 10:54:01       14 阅读
  4. 深入理解运用C语言中的Break语句

    2024-01-23 10:54:01       37 阅读
  5. Rust条件语句:if-else表达式详解

    2024-01-23 10:54:01       29 阅读
  6. 正则表达式深入理解与应用

    2024-01-23 10:54:01       16 阅读
  7. 深入理解 Rust 中的元编程

    2024-01-23 10:54:01       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 10:54:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 10:54:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 10:54:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 10:54:01       18 阅读

热门阅读

  1. 【MySQL】了解索引的第一步

    2024-01-23 10:54:01       32 阅读
  2. IDEA的快捷键

    2024-01-23 10:54:01       33 阅读
  3. 哈希--128. 最长连续序列/medium 理解度C

    2024-01-23 10:54:01       32 阅读
  4. console.log(3 + + “3“) 打印出什么?

    2024-01-23 10:54:01       22 阅读
  5. C# ASP.NET MVC 配置 跨域访问

    2024-01-23 10:54:01       28 阅读
  6. rocketmq双主双从部署+dashbord

    2024-01-23 10:54:01       30 阅读
  7. 风信子(线段树)

    2024-01-23 10:54:01       34 阅读
  8. 【Delphi 基础知识 24】Format函数的用法

    2024-01-23 10:54:01       34 阅读