gpt4 book ai didi

rust - 为什么 return 表达式在不需要时使用分号?

转载 作者:行者123 更新时间:2023-11-29 08:05:36 24 4
gpt4 key购买 nike

我正在学习 Rust,我发现了一些与函数混淆的东西。根据the official reference ,返回表达式:

.. [is] denoted with the keyword return. Evaluating a return expression moves its argument into the output slot of the current function, destroys the current function activation frame, and transfers control to the caller frame.

所以,这个程序有效:

fn main() {
let current_hour = 10;
let message = get_message(current_hour);

println!("Good {0}", message);
}

fn get_message(current_hour: i32) -> &'static str {

if current_hour < 11 {
return "Morning"
}
else if current_hour < 17 {
return "Afternoon"
}
else {
return "Evening"
}

}

当我在“返回”表达式中添加分号时,它仍然有效:

fn main() {
let current_hour = 10;
let message = get_message(current_hour);

println!("Good {0}", message);
}

fn get_message(current_hour: i32) -> &'static str {

if current_hour < 11 {
return "Morning";
}
else if current_hour < 17 {
return "Afternoon";
}
else {
return "Evening";
}

}

我的 understanding of expression statements (e.g. expr;)是它将评估 expr 表达式,并忽略结果(相反它将使用 ())。在使用 return expr; 的情况下,似乎没有使用 ;理由,因为 return expr 破坏当前函数激活帧(然后将忽略 ;)。

那么,为什么我见过的很多 Rust 代码在没有必要的情况下都使用分号(事实上这让 learning about Rust's functions 非常困惑......因为它感觉自相矛盾)。它只是从其他语言中继承下来的习语吗?

最佳答案

Is it just an idiom from other languages that has carried over?

是的,我认为就是这样,只是习惯和可能对感觉怪异和不怪异的一般审美感(这当然受到某人以前使用的语言的影响)。

AFAICT,它唯一能做的就是像

fn foo() {
return;
println!("hi");
}

return 需要是一个语句...但是 return 之后的代码是不可访问的(编译器会告诉你),所以这可能不会在实际代码中经常发生。

关于rust - 为什么 return 表达式在不需要时使用分号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27876561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com