02. rust基础-function

return-返回的使用

这里只讲我遇到的一些function使用和其他语言的区别

fn is_even(num: i64) -> bool {
    num % 2 == 0
}

fn sale_price(price: i64) -> i64 {
    if is_even(price) {
        price - 10
    } else {
        price - 3
    }
}

fn main() {
    let original_price = 52;
    println!("Your sale price is {}", sale_price(original_price));

我们可以看到,这里没有return语句,但是它隐藏在一段代码的使用中,下面单另挑出来看:
在 Rust 中,函数体的最后一个表达式的值会被当作函数的返回值,这就是为什么 sale_price 函数能够返回值而没有显式使用 return 关键字的原因。

具体解释

fn sale_price(price: i64) -> i64 {
    if is_even(price) {
        price - 10
    } else {
        price - 3
    }
}
  1. 函数的最后一个表达式

    • if 表达式中,price - 10price - 3 是返回的值。
    • 整个 if 表达式的结果会作为 sale_price 函数的最后一个表达式。
    • 由于 Rust 函数允许省略最后一个表达式的 return 关键字,sale_price 函数会将 if 表达式的值作为返回值。
  2. Rust 的表达式驱动

    • Rust 是一种表达式驱动的语言,if 是一个表达式,而不是像某些语言中的语句。
    • if 表达式返回的值取决于满足条件的分支中的最后一个表达式的值。
  3. 没有分号意味着返回值

    • 如果在 if 表达式的分支中添加分号,Rust 会将其视为语句,而不是表达式。这种情况下,你必须显式地使用 return 来返回值。
    • 例如:
      if is_even(price) {
          price - 10; // 注意分号
      } else {
          price - 3;  // 注意分号
      }
      
      上述代码会导致编译错误,因为 if 表达式没有返回值。

总结

  • 在 Rust 中,函数体的最后一个表达式会自动作为函数的返回值。
  • 没有分号的表达式会隐式返回值。
  • 如果你想显式返回值,可以使用 return 关键字。
  • 虽然rust可以省略return,使用表达式驱动返回值,但是使用return也是完全没问题的!

这就是rust的return设计哲学。

posted @ 2025-01-13 16:16  代码世界faq  阅读(68)  评论(0)    收藏  举报