變量
rust 中變量默認是不可變的
fn main() {
let mut x = 5;
println!("The value of x is: {x}");
x = 6;
println!("The value of x is: {x}");
}
$ cargo run
Compiling variables v0.1.0 (file:///projects/variables)
error[E0384]: cannot assign twice to immutable variable `x`
--> src/main.rs:4:5
|
2 | let x = 5;
| -
| |
| first assignment to `x`
| help: consider making this binding mutable: `mut x`
3 | println!("The value of x is: {x}");
4 | x = 6;
| ^^^^^ cannot assign twice to immutable variable
For more information about this error, try `rustc --explain E0384`.
error: could not compile `variables` due to previous error
想要可變要加 mut
let mut x = 5;
x = 6
常量
不允許對常量使用 mut。常量不光默認不可變,它總是不可變。聲明常量使用 const 關(guān)鍵字而不是 let,并且 必須 注明值的類型窟勃。
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
隱藏
可以用相同變量名稱來隱藏一個變量,以及重復使用 let 關(guān)鍵字來多次隱藏
fn main() {
let x = 5;
let x = x + 1;
{
let x = x * 2;
println!("The value of x in the inner scope is: {x}");
}
println!("The value of x is: {x}");
}
隱藏與將變量 mut 的區(qū)別:
1). 隱藏必須使用 let 關(guān)鍵字
2). 當再次使用 let 時逗堵,實際上創(chuàng)建了一個新變量秉氧,我們可以改變值的類型,并且復用這個名字蜒秤,而 mut 不允許我們修改值的類型
元組
用包含在圓括號中的逗號分隔的值列表來創(chuàng)建一個元組汁咏。元組中的每一個位置都有一個類型,而且這些不同值的類型也不必是相同的垦藏。這個例子中使用了可選的類型注解:
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
}
- 解構(gòu)
fn main() {
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {y}");
}
- 索引訪問
我們也可以使用點號(.)后跟值的索引來直接訪問它們梆暖。例如:
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
數(shù)組
與元組不同,數(shù)組中的每個元素的類型必須相同掂骏,長度是固定的
- 編寫數(shù)組類型
在方括號中包含每個元素的類型轰驳,后跟分號,再后跟數(shù)組元素的數(shù)量弟灼。
let a: [i32; 5] = [1, 2, 3, 4, 5];
還可以通過在方括號中指定初始值加分號再加元素個數(shù)的方式來創(chuàng)建一個每個元素都為相同值的數(shù)組:
let a = [3; 5];
// 等價于
let a = [3, 3, 3, 3, 3];
- 訪問數(shù)組
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0]; // 1
let second = a[1]; // 2
}
函數(shù)
所有字母都是小寫并使用下劃線分隔單詞
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function.");
}
- 參數(shù)
在函數(shù)簽名中级解,必須 聲明每個參數(shù)的類型
fn main() {
another_function(5);
}
fn another_function(x: i32) {
println!("The value of x is: {x}");
}
fn main() {
print_labeled_measurement(5, 'h');
}
fn print_labeled_measurement(value: i32, unit_label: char) {
println!("The measurement is: {value}{unit_label}");
}
- 具有返回值的函數(shù)
在箭頭(->)后聲明它的類型。在 Rust 中田绑,函數(shù)的返回值等同于函數(shù)體最后一個表達式的值勤哗。
fn five() -> i32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {x}");
}
if 表達式
if 里的條件判斷必須是 bool 值
fn main() {
let number = 3;
if number < 5 {
println!("condition was true");
} else {
println!("condition was false");
}
}
- 在 let 語句中使用 if
fn main() {
let condition = true;
let number = if condition { 5 } else { 6 };
println!("The value of number is: {number}");
}
loop 循環(huán)
可以使用 break 跳出循環(huán)
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {result}");
}
while 循環(huán)
fn main() {
let mut number = 3;
while number != 0 {
println!("{number}!");
number -= 1;
}
println!("LIFTOFF!!!");
}