rust 語法和語義 01 變量綁定
變量綁定 variable-bindings
概述
fn foobar() {
let mut x : u32 = 5;
let x = "I'm shadowed to string";
}
-------------------------------------
scope
between { and }
keyword mutability patterns type annotations = initializing bindings
let mut x : u32 = 5;
shadowing
let x = "I shadowed to string";
-------------------------------------
關鍵字 let
關鍵字 let
聲明一個綁定 binding
。
let x = 5;
模式 patterns
let
語句等式左面是一個模式 pattern
。他可以是變量 variable
也可以是元組 tuple
等。
let (x, y) = (1, 2);
類型註解 type annotations
用 : 類型名
明確指出 模式類型。可以如下方式朗讀:
“x 被綁定爲 i32 類型,他的值是 5”
let x : i32 = 5;
let (x, y) : (u32, u32) = (1, 2);
可變性 mutability
綁定默認是不可變 immutable
的。使用關鍵字 mut
使一個綁定可變。
let mut x = 5;
mint: 類似於c中的關鍵字
const
。
在c中,很多函數的參數聲明上都會寫上const
防止原始數據被意外修改而破壞。
初始化綁定 initializing bindings
綁定
要求在使用它之前必須 初始化
。
let x = 5;
作用域 scope
作用域:變量綁定被限制在他們被定義的塊中存在。一個塊是被 {
和 }
包圍的語句集合。
fn foo() {
let x : i32 = 1;
{
let y : i32 = 2;
println!("y is in this scope: {}, {}", x, y);
}
// error, y is out of scope
println!("y isn't in this scope: {}, {}", x, y);
}
隱藏 shadowing
隱藏:一個 後聲明
並位於 同一作用域scope
的 相同名字的綁定
將會覆蓋前一個綁定。
// mutable
let mut x : i32 = 1;
x = 7;
// shadowing
let y = 4;
let y = "I'm shadowed to string";