Rust 中語法能夠分紅兩大類: 語句(Statement)和表達式(Expression)。 語句是指要執行的一些操做和產生負做用的表達式。 表達式主要用於計算求值。markdown
語句可分爲兩種: 聲明語句(Declaration statement)和 表達式語句(Expression statement)。 * 聲明語句,用於聲明各類語言項(Item),包括聲明變量、靜態變量、常量、結構體、函數等,以及經過 extern 和 use 關鍵字引入包和模塊等。 * 表達式語句,特指以分好結尾的表達式。此類表達式求值結果將被捨棄,並總返回單元類型()。函數
/* 下兩行爲聲明語句 */
// extern create std;
// use std::prelude::vl::*
fn main () {
pub fn answer () -> () {
let a = 40;
let b = 2;
assert_eq!(sum(a, b), 42);
}
pub fn sum(a: i32, b: i32) -> i32 {
a + b
}
answer();
}
複製代碼
第 1 行和第 2 行爲聲明語句,無需求職,只是用來引入標準庫包以及 prelude 模塊。此處作註釋是由於 Rust 會爲每一個 crate 都自動引入標準庫模塊,除非使用 #[no_std]
屬性指明不須要標準庫。spa
fn 關鍵字定義了兩個函數 answer 和 sum。關鍵字 fn 是 function 縮寫。code
函數 answer 沒有輸入參數,且返回值爲 單元類型()。單元類型擁有惟一的值,就是它自己,爲方便描述稱之爲單元值。以單元值做爲返回值,表明當前函數無返回值,無返回值的函數無需聲明返回類型。orm
在 answer 使用let 聲明瞭兩個變量 a 和 b ,其後必須加分號。編譯器
assert_eq! 是宏語句,它是由 Rust 提供的斷言,容許判斷給定的兩個表達式求值結果是否相同。以!結尾而且能夠像函數同樣被調用的語句在 Rust 中被稱爲宏。it
函數 sun 的兩個輸入參數和返回值均指定爲 i32 類型。函數體只包含一個表達式用於計算 a 與 b 的值,並返回。io
Rust 編譯器在解析代碼時,若是遇到分號,就會繼續日後面執行;若是碰到語句,則執行語句;若是遇到表達式,則會對錶達式求值,若是分號後面什麼都沒有,就會補充上單元值().編譯
能夠將 Rust 中的一切都當作是表達式。因爲分好什麼都沒有的時候會自動補充單元值的特色,咱們能夠將 Rust 語句看作計算結果均爲() 的特殊表達式。對於普通表達式來說,則會獲得正常的求值結果。table