Rust 中的函數(shù)定義以 fn 開始并在函數(shù)名后跟一對圓括號。大括號告訴編譯器哪里是函數(shù)體的開始和結(jié)尾扼菠。
Rust 代碼中的函數(shù)和變量名使用 snake case(蛇形命名法) 規(guī)范風(fēng)格恰梢。在 snake case 中容握,所有字母都是小寫并使用下劃線分隔單詞.
一 函數(shù)調(diào)用
cargo new functions 創(chuàng)建項目
vim ./src/main.rs 輸入以下內(nèi)容
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function")
}
~
運行
cargo run
Compiling functions v0.1.0 (/home/li/projects/functions)
Finished dev [unoptimized + debuginfo] target(s) in 6.00s
Running `target/debug/functions`
Hello, world!
Another function
二 函數(shù)參數(shù)
在函數(shù)簽名中芋膘,必須 聲明每個參數(shù)的類型旦袋。這是 Rust 設(shè)計中一個經(jīng)過慎重考慮的決定:要求在函數(shù)定義中提供類型注解祭钉,意味著編譯器不需要你在代碼的其他地方注明類型來指出你的意圖瞄沙。
當(dāng)一個函數(shù)有多個參數(shù)時,使用逗號分隔
another_function 的聲明中有命名為 x , y的參數(shù)。x, y 的類型被指定為 i32距境。
修改mian.rs
fn main() {
println!("Hello, world!");
another_function(5, 6);
}
fn another_function(x: i32, y: i32) {
println!("Another function input is : {} {}", x, y);
}
運行結(jié)果
cargo run
Compiling functions v0.1.0 (/home/li/projects/functions)
Finished dev [unoptimized + debuginfo] target(s) in 0.40s
Running `target/debug/functions`
Hello, world!
Another function input is : 5 6
三 包含表達式的函數(shù)體
實際上申尼,我們已經(jīng)使用過語句和表達式。語句(Statements)是執(zhí)行一些操作但不返回值的指令垫桂。表達式(Expressions)計算并產(chǎn)生一個值师幕。
let y = 6; //語句
let y = {
let x = 3;
x + 1
}; //
/*其中語句為表達式,
{
let x = 3;
x + 1
};*/
注意: 注意結(jié)尾沒有分號的那一行 x+1诬滩,與你見過的大部分代碼行不同霹粥。表達式的結(jié)尾沒有分號。如果在表達式的結(jié)尾加上分號疼鸟,它就變成了語句后控,而語句不會返回值。在接下來探索具有返回值的函數(shù)和表達式時要謹(jǐn)記這一點空镜。
四 函數(shù)返回值
函數(shù)可以向調(diào)用它的代碼返回值浩淘。我們并不對返回值命名,但要在箭頭(->)后聲明它的類型吴攒。在 Rust 中张抄,函數(shù)的返回值等同于函數(shù)體最后一個表達式的值。使用 return 關(guān)鍵字和指定值洼怔,可從函數(shù)中提前返回署惯;但大部分函數(shù)隱式的返回最后的表達式。這是一個有返回值的函數(shù)的例子:
fn five() -> i32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {}", x);
}