为什么 return 表达式在不需要时使用分号?
Why do return expressions use semicolons when they're unnecessary?
我正在学习 Rust,我发现了一些与函数混淆的东西。根据the official reference,一个return表达式:
.. [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"
}
}
当我在 "return" 表达式中添加分号时,它仍然有效:
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,我发现了一些与函数混淆的东西。根据the official reference,一个return表达式:
.. [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"
}
}
当我在 "return" 表达式中添加分号时,它仍然有效:
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
之后的代码是不可访问的(编译器会告诉你),所以这可能不会发生那么多真实代码。