Rust 中的語法分為兩大類: 語句 (statement) 和表達式 (Expression)。
語句:指的是要執行的一些操作和產生副作用的表達式。
表達式:主要用於計算求值。
-
語句
-
聲明語句:用於聲明各種語言項,包括變量、靜態變量、常量、結構體、函數等,以及通過extern和use關鍵字引入包和模塊。
-
表達式語句:特指以分號結尾的表達式。此類表達式求值結果將會被舍棄,並總是返回單元類型()。單元類型擁有唯一的值,就是它本身。單元類型的概念來自OCmal,他表示“沒什么特殊的價值”。將單元值作為函數返回值。就表示該函數無返回值,通常,無返回值的函數不需要在函數簽名中指定返回類型。
-
//extern crate std;// 聲明語句
//use std::prelude::v1::*;//上同
//注釋掉,是因為Rust會為每個crate都自動引入標准庫模塊,除非使用#[no_std]屬性明確指定了不需要標准庫。
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();
}
從這個角度來看,可以將Rust看作一切皆表達式。由於當分號后面什么都沒有時自動補單元值()的特點,可以將Rust中的語句看作計算結果均為()的特殊表達式。而對於普通的表達式來說,則會得到正常的求值結果。
當遇到函數的時候,會將函數體的花括號識別為塊表達式。塊表達式是由一對花括號和一系列表達式組成的,它總是返回塊中最后一個表達式的值。
Rust編譯器在解析代碼的時候,如果碰到分毫,就會繼續往后面執行;如果碰斷語句,則執行語句;如果碰到表達式,則會對表達式求值,如果分號后面什么都沒有,就會補上單元值()。
Assert_eq!是宏語句,是Rust提供的斷言,允許判斷給定的兩個表達式求值結果是否相同。像這種名字以嘆號結尾,並且可以像函數一樣被調用的語句,在Rust中叫做宏。