學習Rust 函式

大雄45發表於2020-12-03
導讀 Rust 語言是一種高效、可靠的通用高階語言。其高效不僅限於開發效率,它的執行效率也是令人稱讚的,是一種少有的兼顧開發效率和執行效率的語言。

學習Rust 函式學習Rust 函式
函式在 Rust 語言中是普遍存在的。

透過之前的章節已經可以瞭解到 Rust 函式的基本形式:

fn <函式名> ( <引數> ) <函式體>

其中 Rust 函式名稱的命名風格是小寫字母以下劃線分割:

例項

fn main() {
    println!("Hello, world!");
    another_function();
}
fn another_function() {
    println!("Hello, runoob!");
}

執行結果:

Hello, world!
Hello, runoob!

注意,我們在原始碼中的 main 函式之後定義了another_function。 Rust不在乎您在何處定義函式,只需在某個地方定義它們即可。

函式引數

Rust 中定義函式如果需要具備引數必須宣告引數名稱和型別:

例項

fn main() {
    another_function(5, 6);
}
fn another_function(x: i32, y: i32) {
    println!("x 的值為 : {}", x);
    println!("y 的值為 : {}", y);
}

執行結果:

x 的值為 : 5
y 的值為 : 6
函式體的語句和表示式

Rust 函式體由一系列可以以表示式(Expression)結尾的語句(Statement)組成。到目前為止,我們僅見到了沒有以表示式結尾的函式,但已經將表示式用作語句的一部分。

語句是執行某些操作且沒有返回值的步驟。例如:

let a = 6;

這個步驟沒有返回值,所以以下語句不正確:

let a = (let b = 2);

表示式有計算步驟且有返回值。以下是表示式(假設出現的識別符號已經被定義):

a = 7
b + 2
c * (a + b)

Rust 中可以在一個用 {} 包括的塊裡編寫一個較為複雜的表示式:

例項

fn main() {
    let x = 5;
    let y = {
        let x = 3;
        x + 1
    };
    println!("x 的值為 : {}", x);
    println!("y 的值為 : {}", y);
}

執行結果:

x 的值為 : 5
y 的值為 : 4

很顯然,這段程式中包含了一個表示式塊:

{
    let x = 3;
    x + 1
};

而且在塊中可以使用函式語句,最後一個步驟是表示式,此表示式的結果值是整個表示式塊所代表的值。這種表示式塊叫做函式體表示式。

注意:x + 1 之後沒有分號,否則它將變成一條語句!

這種表示式塊是一個合法的函式體。而且在 Rust 中,函式定義可以巢狀:

例項

fn main() {
    fn five() -> i32 {
        5
    }
    println!("five() 的值為: {}", five());
}
函式返回值

在上一個巢狀的例子中已經顯示了 Rust 函式宣告返回值型別的方式:在引數宣告之後用 -> 來宣告函式返回值的型別(不是 : )。

在函式體中,隨時都可以以 return 關鍵字結束函式執行並返回一個型別合適的值。這也是最接近大多數開發者經驗的做法:

例項

fn add(a: i32, b: i32) -> i32 {
    return a + b;
}

但是 Rust 不支援自動返回值型別判斷!如果沒有明確宣告函式返回值的型別,函式將被認為是"純過程",不允許產生返回值,return 後面不能有返回值表示式。這樣做的目的是為了讓公開的函式能夠形成可見的公報。

注意:函式體表示式並不能等同於函式體,它不能使用 return 關鍵字。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2739284/,如需轉載,請註明出處,否則將追究法律責任。

相關文章