Rust 函式詳解

2022-09-20 10:09:09 字數 2279 閱讀 6974

目錄

rust 支援多種程式設計正規化,但更偏向於函式式,函式在 rust 中是「一等公民」,函式可以作為資料在程式中進行傳遞。跟 c、c++ 一樣, rust 也有乙個唯一的程式入口main函式。

示例:程式入口main函式

fn main()

rust 使用fn關鍵字來宣告和定義函式,使用snake case風格來命名函式,即所有的字母小寫並使用下劃線分隔單詞。函式可以有引數,並且每個函式都有返回值。

引數的宣告方式:引數名 + 冒號 + 引數型別

示例:// 定義乙個無參函式

fn function()

// 定義乙個有參函式

fn hello(name: &str) .", name);

}在 rust 中所有函式都有返回值,main函式也不例外,main函式的返回值是()(乙個空的元組)。在 rust 中,當乙個函式返回()時,可以省略返回值型別的宣告。main函式的完整形式如下:

fn main() -> ()

()通常被稱為unit或者unit type,它其實類似於 c/c++、j**a、c#中的 void 型別。

若函式有其他型別返回值,則需使用->顯式標明返回值型別。像 c/c++ 或 j**a 等語言在函式中需要用return語句返回乙個值,rust 與它們不一樣,rust 預設將函式中最後乙個表示式的結果作為返回值。

示例:定義乙個有返回值的函式

fn main() ", x);

}fn plus_one(x: i32) -> i32

rust 也有return關鍵字,不過一般用於提前返回。

示例:在函式中使用return

fn main() ", find(7, &a));

println!("there is 8 in tjouyclmhe array: {}", find程式設計客棧(8, &a));

}fn find(n: i32, a: &[i32]) -> bool

} false // 這裡也可以改為 `return false;`,但這就不是 rust 的程式設計風格了

}在 rust 中還有一種「沒有返回值」的函式,稱之為發散函式(diverging function)。其實,它根本就不返回,它使用感嘆號!作為返回型別。

示例:fn main()

fn diverging() -> !

發散函式一般都以panic!巨集呼叫或其他呼叫其他發散函式結束,所以,呼叫發散函式會導致當前執行緒崩潰。

高階函式與普通函式的不同在於,它可以使用乙個或多個函式作為引數,可以將函式作為返回值。既然函式可以作為引數和返回值,那麼函式也應該有一種相對應的資料型別,那就是:函式指標型別。

函式指標型別使用fn關鍵字定義,在編譯時該型別指向乙個已知函式引數和返回值型別,但函式體未知的函式。

示例:// 函式定義

fn inc(n: i32) -> i32

// 使用 `type` 給函式指標型別起乙個別名

ty程式設計客棧pe inctype = fn(i32) -> i32;

fn main() ", func(3));

// 使用函式指標型別的別名 `inctype`

let func: inctype = inc;

println!("4 + 1 = {}", func(4));

}函式作為引數,其宣告與普通引數一樣。

示例:高階函式

fn main() ", process(3, inc));

println!("3 - 1 = {}", process(3, dec));

}fn inc(n: i32) -> i32

fn dec(n: i32) -> i32

// process 是乙個高階函式,它有兩個引數,乙個型別為 `i32`,另乙個型別為 `fn(i32)->i32`

fn process(n: i32, func: fn(i32) -> i32) -> i32

函式作為返回值,其宣告與普通函式的返回值型別宣告一樣。

示例:fn main()

println!("", b);

} // 若傳入的引數為偶數,返回 `inc`,否則返回 `dec`

fn get_func(n: i32) -> fn(i32) -> i32

jouyclm fn dec(n: i32) -> i32

if n % 2 == 0 else

}rust programming language

the rust reference

rust by example

rustprimer

rust的綠卡 rust中的Pin詳解

rust中的pin詳解 相關概念 pin這是乙個struct,作用就是將p所指向的t在記憶體中固定住,不能移動。說白一些,就是不能通過safe 拿到 mut t。pin定義如下 pub struct pin pointer p,unpin 這是乙個trait,定義在std marker中,如果乙個t...

Rust 變數與函式

繫結 fn main 上面的 在編譯的時候會出現警告,告訴你繫結的變數都沒有使用過。fn main 而且變數繫結必須要初始化,若是輸出未初始化的繫結會無法編譯 可變性 如果想要可以隨意被賦值 改變使用mut關鍵字 fn main 作用域 與c語言的作用域原理基本類似,用花括號來限制作用域。不同的是,...

Rust 函式文件注釋

參考 文件注釋可以生成 html 檢視,支援 markdown 格式。主函式 fn main x 加法函式 fn add x i32,y i32 i32 可以使用命令cargo doc來生成文件注釋的 html 格式,在target doc目錄下 ps c users jiangbo work wo...