rust以fn
為關鍵字宣告乙個函式。函式命名規範為全小寫,以下劃線為分隔的單詞。
fn main()
多個引數以逗號分隔,函式引數必須指定資料型別
fn test(x: i32, y: u64)()
函式體由一系列的以表示式結尾的語句組成。到目前為止我們只涉及了沒有表示式結尾的函式,但是能看出表示式是語句的一部分。因為rust是一種基於表示式的語言,這是乙個需要理解的重大區別。其他語言在語句與表示式上並沒有這樣的區別。下面來**什麼是rust語句和表示式,以及它們的不同是怎樣影響函式體的。
語句是執行某些動作且無返回值的指令集。表示式是有返回值的。
使用let關鍵字建立乙個新的變數並賦值,是一條語句。let x = 6;
是一條語句。因為語句沒有返回值,所以rust不能像c/ruby那樣可以多重賦值,let x = (let y = 6);
這樣的句法在rust中是錯誤的。
函式定義也是語句。
fn main()
這是乙個只包含一條語句的main函式,而它整個自身也是乙個語句。
除了語句,表示式求值構成了我們將在rust編寫的剩餘的大部分**。函式呼叫、巨集呼叫、數**算,以及 {} 構成的**域等都是表示式。表示式可以是組成語句的一部分。
以上例子,fn main() ;
println!("the value of y is: {}", y);
}
let x = 5;
是一條語句, 5是乙個表示式, 它求值5並返回給了賦值語句。
let y = ;
整體是乙個語句, 但是是乙個求值表示式, 它返回值給y賦值。
x + 1
是乙個求值表示式,它返回值給了{}
表示式。 注意x + 1
結尾沒有分號。因為;
是一條語句結束的完整標誌。如果表示式x + 1
的結尾新增了分號,那它就變成了乙個語句,而語句是沒有返回值的。
函式在呼叫時可以返回值,rust可以不顯式的命名返回值,但必須以->
宣告返回值的型別, 在rust中,函式返回值與函式體中最後乙個表示式的返回值是同義的。
fn five() -> i32
如上例, 函式體內既沒有語句,呼叫,甚至let宣告,但它是乙個完整的函式。
rust的注釋使用 雙斜槓//
。 可單行,可在行**結尾後使用
if 表示式的條件必須是bool值。 rust不會自動的將非布林值轉換成布林值,所以if表示式 必須要明確返回布林型別的值。
fn main()
}error[e0308]: mismatched types
--> src/main.rs:4:8
| 4 | if number `
上例,number是乙個整型, rust不會像其他語言一樣, 在if表示式中轉成bool。
處理多個條件時使用 else if
fn main() else if number % 3 == 0 else if number % 2 == 0 else
}
在let
語句中使用if表示式
fn main() else ; // note ;
println!("the value of number is {}", number);
}
在let
語句中使用if else
時要注意,if 和else的**塊返回的值得型別要一致,不然直譯器會報錯。其實這很好理解,let
語句是用來給變數賦值的,此時if else 返回的值的不確定性是有潛在的風險的, 所有它們的型別必須一致,才能保證安全性。
loop關鍵字會一直迴圈loop塊內的**,除非遇到break或ctrl c 中斷
帶條件的迴圈 while
for 迴圈, for… in … 用法與python型別
fn main() ", element);
}}
Rust學習筆記 2 函式
函式在rust中用來實現特定功能。其中,main函式是很多程式的入口點。在rust中用關鍵字fn來定義乙個函式。rust 中的函式和變數名使用 snake case 規範風格。在 snake case 中,所有字母都是小寫並使用下劃線分隔單詞。例如 fn this is a function 函式的...
Rust 函式詳解
目錄 rust 支援多種程式設計正規化,但更偏向於函式式,函式在 rust 中是 一等公民 函式可以作為資料在程式中進行傳遞。跟 c c 一樣,rust 也有乙個唯一的程式入口main函式。示例 程式入口main函式 fn main rust 使用fn關鍵字來宣告和定義函式,使用snake case...
Rust學習筆記
toc rust學習筆記 初步閱讀rust的 以學習rust語言 match 採用表示式的形式,然後根據它的值來分支。分支的每個 臂 都是 val expression 的形式。當值匹配時,這個臂的表示式將被執行實現。之所以稱之為 match 是因為 模式匹配 的術語,而這種正是 match 實現的...