rust 语句和表达式

Created

2024-09-12 17:30:16

Updated

2024-10-29 12:40:30

1 概念

Diagram
知识点回顾

() 既是一种类型:单元类型, 也是一个值

2 {} 代码块表达式

{}代码块表达式的值
fn main() {
    // {} 代码块 是有值的, 如果最后一个表达式后面有分号,那么整个代码块的值是 ()
    // 所以我们可以将它赋值给变量, 注意最后 }后的分号 是表明这一整个是一个语句
    // 可以说这个时候, {} 将语句变成了表达式,它的返回值是()
    let a = {
        let tmp = 2;
    };
    println!("a的值: {:?}", a); // ()
    let a = {
        let tmp = 2;
        5
    };
    println!("a的值: {:?}", a); // 5
}
函数体
// 函数的函数体 {} 这个就可以理解为 {}表达式
// 所以现在可以理解能这些写
fn test() -> i32 {
    let b = 2;
    println!("{}", b);
    b
}
单独的{} 不带分号的情况
fn test() -> i32 {
    {
        let a = 1;
        // 如果写了什么作为返回值, 就只能写 ()
        // 当然我们不可能写类似这样的代码
        // 因为这个{} 没有接收者
        ()
    }  //注意这里没有 ; 
    let b = 2;
    b
}
单独的{}; 带分号的情况
fn test() -> i32 {
    {
        let a = 1;
        "aa"  // 可以返回任何类型的值
    };  // 当你加了 ; 后, 这{}; 是一个语句,
        // 你可以理解为 将{} 表达式的值赋值给一个临时变量,
        // 所以{} 里面可以返回任何值

    let b = 2;
    b
}
fn main(){}

3 赋值表达式

赋值表达式的值
fn main(){
    let y;
    // 赋值表达式 y=2, 我们知道表达式是有值的, 它的返回值是()
    // let b = (y = 2); (y=2) 的括号可以省略,所以如下写法
    let b = y = 2;
    println!("y的值: {}", y); // 2
    println!("b的值: {:?}", b); // ()
    // 直接报错, 右边是个语句,没有返回值
    // let a=(let z=2;);
}
if中使用赋值表达式
fn main(){
    let z;
    // z=3 的返回值是() , 而 我们需要是的 bool类型
    // 所以报错了.
    if z = 3 {
        println!("hello");
    }
}

4 if else 表达式

Note
  • 当成三元运算, 实际上这种方式更加的易于理解,可读性好
  • 三元运算,本身需要重新学习,时间一长,可能忘记了逻辑, 而if else天生就不会忘记
  • 这也是有些语言为什么不设计三元表达式的原因
fn main() {
    let x = 1;
    let is_one = if x == 1 { true } else { false };
    println!("{}", is_one);
}
Back to top