Rust 變數與函式

2021-07-26 11:55:19 字數 2101 閱讀 4921

繫結

fn

main()

上面的**在編譯的時候會出現警告,告訴你繫結的變數都沒有使用過。

fn

main()

而且變數繫結必須要初始化,若是輸出未初始化的繫結會無法編譯

可變性

如果想要可以隨意被賦值、改變使用mut關鍵字

fn

main()

作用域

與c語言的作用域原理基本類似,用花括號來限制作用域。不同的是,在同乙個作用域當中,後宣告的同名變數繫結會被覆蓋。

fn

main() ",x);//輸出8

let x = 12;

println!("{}",x);//輸出12

}println!("{}",x);//輸出8

let x = 42;//可以重複繫結x

println!("{}",x);//42

}

例子

fn

main()

用關鍵字fn來宣告函式

fn

print_sum(x: i32, y: i32)//宣告函式print_sum,設定兩個i32型別引數x和y輸出和

",x+y);}fn

main()

與let不同,你必須為函式引數宣告型別。下面**將不能工作:

fn

print_sum(x, y)", x+y);

}

會獲得如下錯誤:

expected one of `!`,`:`,

or`@

`, found `)

`fn print_sum(x, y)

fnmain() ",get_sum(5,6));

}

很奇怪?

文件中的意思是

表示式返回乙個值,而語句不返回值

x+y;是乙個語句

x+y是乙個表示式

y=5是乙個表示式,但是返回的值沒什麼用,在c語言當中些y=5是會返回y的這個值,而在rust語言當中不會

//在rust語言當中

letmut y = 5;

let x = (y = 6);//x 的值是 `()`,不是 `6`

int y=5;

int x = (y = 6);//x的值會是6,因為y=6的表示式返回6

它的目的是把任何表示式變為語句

這意味著你用分號來分隔各個表示式

提早返回:

就是提供了人性化的return語句

fn

get_sum(x: i32, y: i32)->i32

//返回乙個i32型別

fnmain() ",get_sum(1,2));

}

發散函式:

發散函式就是什麼也不返回的函式。

根據rust的含義,空函式會返回乙個空的元組()

fn

diverges() ->!

fnvoid()

fnmain() is a truple",void()==());//void返回乙個()

diverges();//什麼也不返回

}

發散函式有什麼意義,可以參考這篇部落格

函式指標:

和c語言當中的函式指標比較像,就是把函式當成乙個物件來使用

fn

plus_one(i: i32) -> i32

fnmain() ",ff(5));//6

println!("{}",f(5));//6

}

來自rust book 1.14版本

to be continue~

Rust 入門 變數與可變性

fn main x x 6 如果我們對乙個不可變得變數進行再次賦值的操作 編譯器會丟擲乙個異常 cannot assign twice to tmmutable variable println x x fn main x x 6 println x x cargo run x 5 x 6 在程式執...

Rust中變數的複製與Copy trait

示例程式 fn main y x,y 輸出 x 123,y 123 上述程式中,在建立變數 y 之後,變數 x 繼續有效。而不會想 string 的賦值一樣發生移動 這是因為對於包括整型在內的一些型別來說,在編譯時可以得知自己的大小,並且能夠將自己的資料完整地儲存在棧記憶體中。因為資料的拷貝全部發生...

Rust學習四 rust的函式 注釋與控制流

rust以fn為關鍵字宣告乙個函式。函式命名規範為全小寫,以下劃線為分隔的單詞。fn main 多個引數以逗號分隔,函式引數必須指定資料型別 fn test x i32,y u64 函式體由一系列的以表示式結尾的語句組成。到目前為止我們只涉及了沒有表示式結尾的函式,但是能看出表示式是語句的一部分。因...