Rust 的条件语句、表达式与语句和功能函数的返回值

Rust 的条件语句、表达式与语句和功能函数的返回值

一、标准语句

1、if 基本语句

let x = 5;

if x == 5 {
    println!("x is five!");
}

if 后面 x ==5 是一个表达式 expression 。

2、if … else语句

let x = 5;

if x == 5 {
    println!("x is five!");
} else {
    println!("x is not five :(");
}

3、if … else if … else

let x = 5;

if x == 5 {
    println!("x is five!");
} else if x == 6 {
    println!("x is six!");
} else {
    println!("x is not five or six :(");
}

二、特别语句

let x = 5;

let y = if x == 5 {
    10
} else {
    15
}; // y: i32

或者,还可以写成这样

let x = 5;

let y = if x == 5 { 10 } else { 15 }; // y: i32

如果 x 等于 5,那么 y = 10 ;否则 y = 15 。

这个特别语句是个非常好的例子,我想了很久,该如何把几个关键的概念串起来,并容易理解。

上面这个语句是一个非常好的切入形式!

这段代码执行后的结果是, y = 10

这里重点提及几个关键的概念:

1、代码块 – block

代码块是用大括号包围起来的代码 { }

2、表达式 – expression

一个表达式是不以分号;结尾的、是有值的一行代码。
block可以有返回值,因此block也是一个表达式。

3、语句 – statement

statement是以分号结尾的一行代码,statement的返回值是空的tuple或者称为Unit type,即(),一对空的括号。

官方将以分号结尾的表达式expression称为 expression statement.

好,用代码解释一下:

fn add_one(x: i32) -> i32 {
    x + 1
}

x + 1 是一个表达式,没有分号!
一个功能函数中如果没有用 return 明确返回值,功能函数代码块中的最后一个表达式作为返回值。

再比较一下:

fn add_one(x: i32) -> i32 {
    x + 1;
}

x + 1;
有一个分号,因此这是一个statement。statement返回的是();
而这个功能函数要求返回32位整型数值,所以编译会出错。

改一下

 fn add_one(x: i32)  {
    x + 1;
}

x + 1; 是一个statement,返回空的tuple : ()
功能函数没有要求返回值,所以可以正常执行。

再看一下 if 语句:

let x = 5;

let y = if x == 5 {
    10
} else {
    15
}; // y: i32

x == 5 是一个表达式 expression。
10 和 15 都是 expression,因此当条件语句执行后,无论是if 还是else都会返回有效的32位整型值给 y 。

    原文作者:teamlet
    原文地址: https://blog.csdn.net/teamlet/article/details/50908906
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞