“ return 5;”是否在Rust中为语句或表达式?

时间:2018-09-24 08:37:37

标签: rust

我不是机密人员,但来自Statements and expressions

  

我们实际上已经使用过语句和表达式。语句是执行某些操作且不返回值的指令。表达式的计算结果为结果值。让我们看一些例子。

     

......

     

表达式不包括结尾分号。如果在表达式的末尾添加分号,则将其变成一条语句,然后该语句将不返回值。在接下来探索函数返回值和表达式时,请记住这一点。

对于return 5;,它是语句还是表达式?如果是语句,则语句不应返回值;如果它是一个表达式,则表达式不应以分号结尾。

2 个答案:

答案 0 :(得分:7)

那里的措词不准确。当它说“一条语句...将不返回值”时,表示该语句不是通过将其评估为最终值(如表达式)来处理的,而是通过执行该语句来处理的。对于return语句,执行采用退出当前函数的形式,将返回值传递给调用函数。

return 5;无疑是一个声明。

答案 1 :(得分:2)

您可以通过Rust宏进行查找:

macro_rules! expr_or_stmt {
    ($_:expr) => {
        "expr"
    };
    ($_:stmt) => {
        "stmt"
    };
}

fn main() {
    dbg!(expr_or_stmt!(return 5));
}

它会显示“ expr”,如您在playground上所见。