rust是一門基于表達(dá)式的語言。在他的體系中,只有兩種語句,他們分別是聲明語句和表達(dá)式語句。除了這兩種語句外都是表達(dá)式了。
1.表達(dá)式和語句的區(qū)別
表達(dá)式返回一個值,但是語句并不會返回一個值,語句會使用分號作為結(jié)束。
2.聲明語句
rust使用let來開始一個聲明語句,所以也就是說let開頭則一定是語句。所以像下面這樣的用法就是錯誤的:
let a:i32 = (let b:i32 = 5);//expected expression, found statement (`let`)
從上面的錯誤提示我們便可以看出,let是用來開啟語句的,而對于語句來說是不會有返回值的,所以報(bào)錯。
但是賦值一個已經(jīng)存在的變量則可以是一個表達(dá)式:
let mut b:i32 = 0;
let a = (b = 9);//a的值是一個空元組(),而不是9
需要注意的地方:b=9雖然是一個表達(dá)式,但是他的返回值并不是9這個數(shù)值,雖然這在其他常見的編程語言里面也許返回的事9,但是在我們的rust里面并不是這樣,在rust中,賦值一個已經(jīng)存在過的變量是一個表達(dá)式,這個表達(dá)式的返回值是一個空的元組()。
3.表達(dá)式語句
他就是強(qiáng)制將表達(dá)式轉(zhuǎn)換為語句。
4.提前返回
我們可以利用return關(guān)鍵詞來顯示返回一個值,盡管return是一個語句,但是它也具有為函數(shù)返回值的能力。注意這么一種情況:在顯式返回的return語句后面加上一個用于返回值得表達(dá)式時(shí),那么返回的值將會是return所指定的。
fn main(){
let a:i32 = test(3);
println!("{}", a);
}
fn test(a:i32) -> i32{
return a;
a+1//這句是沒用的
}
通過上面的例子,我們可以看出當(dāng)return語句和返回值表達(dá)式共存的時(shí)候,返回值表達(dá)式會被屏蔽。盡管使用return可以讓我們找回使用其他編程語言的熟悉感,但是鑒于rust語言是基于表達(dá)式設(shè)計(jì)的這一理念,推薦使用返回值表達(dá)式作為函數(shù)的返回值是一個更好的選擇。
END