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,將返回最後一條執行的表達式計算結果,該表達式尾部不能帶分號
- 不使用return,但如果最後一條執行的是一個分號結尾的語句,則返回
()
- 不使用return,但如果最後一條執行的是一個分號結尾的語句,則返回
參考如下函數定義:
#![allow(unused)] fn main() { fn f0(a: i32) -> i32{ if a > 0 { // 使用return來返回,結尾處必須不能缺少分號 return a * 2; } // 最後執行的一條代碼,使用表達式的結果作為函數返回值 // 結尾必須不能帶分號 a * 2 } }