Rust中定義函數

Rust中使用fn關鍵字定義函數,定義函數時需指定參數的數據類型,如果有返回值,則需要指明返回值的數據類型。

fn關鍵字、函數名、函數參數及其類型、返回值類型組成函數簽名。例如fn fname(a: i32, b: i32)->i32是一個函數簽名。

定義函數參見如下幾個簡單的示例:

// 沒有參數、沒有返回值
fn f0(){
  println!("first function_0");
  println!("first function_1");
}

// 有參數,沒有返回值
fn f1(a: i32, b: i32) {
  println!("a: {}, b: {}", a, b);
}

// 有參數,有返回值
fn f2(a: i32, b: i32) -> i32 {
  return a + b;
}

// 調用函數
fn main(){
  f0();
  f1(1,2);
  f2(3,4);
}

函數也可以直接定義在函數內部。例如在函數a中定義函數b,這樣函數b就只能在函數a中訪問或調用:

fn f0(){
  println!("first function_0");
  println!("first function_1");
  
  fn f1(a: i32, b: i32) {
    println!("a: {}, b: {}", a, b);
  }
  
  f1(2,3);
}

fn main(){
  f0();
}

Rust有兩種方式指定函數返回值:

  • 使用return來指定返回值,此時return後要加上分號結尾,使得return成為一個語句
    • return關鍵字不指定返回值時,默認返回()
  • 不使用return,將返回最後一條執行的表達式計算結果,該表達式尾部不能帶分號
    • 不使用return,但如果最後一條執行的是一個分號結尾的語句,則返回()

參考如下函數定義:


#![allow(unused)]
fn main() {
fn f0(a: i32) -> i32{
  if a > 0 {
    // 使用return來返回,結尾處必須不能缺少分號
    return a * 2;
  }
  
  // 最後執行的一條代碼,使用表達式的結果作為函數返回值
  // 結尾必須不能帶分號
  a * 2
}
}