Rust <1>:數據類型、變量、可變性、常量、隱藏

rust 是強類型語言,全部變量、常量都必須有明確的數據類型;不少狀況下,省略類型聲明,編譯器可自動推導,但不是全部狀況下都會成功。數組

rust 有整型、浮點型、布爾型、字符型、數組、元組、枚舉、結構體等數據結構,其中:數據結構

  • 整型有:i八、i1六、i3二、i6四、isize、u八、u1六、u3二、u6四、usize 等
    • 其中 isize 在不一樣硬件架構上編譯的結果不一樣,如在 x86-64 上爲 i64,在x86-32 上則爲 i32
    • 全部硬件平臺的自動推導默認類型均爲 i32
    • 字面值之間能夠添加任意數量的 '_' 提升可讀性,如:123_456_789 與 123456789 等價
    • 0xff、0o7七、0b11_00 分別是十六進制、八進制、二進制表示法,另 b'A' 表示單字節字符 'A',僅支持 u8 類型
  • 浮點型有:f3二、f64,自動推導默認類型 f64

  

1、rust 中的變量值默認是不容許改變的,即不可二次斌值,以下代碼沒法經過編譯,須要在變量前添加 mut 標識架構

fn main() {
    let zVar: i64 = 0;    // let mut zVar: i64 = 0;
    zVar = 1;
    println!("{}", zVar);
}

2、rust 中能夠連續定義同名變量,新的變量將覆蓋舊的變量,且先後的變量類型能夠不一致:即 shadowing 特性。函數

fn main() {
    let zvar: i32 = 0;
    let zvar: i32 = zvar + 1;
    let zvar: i32 = zvar * 2;
    let zvar: &str = "Hello World!";
    let zvar = zvar.len();

    println!("{}", zvar);
}

3、rust 中常量定義必須顯示指明數據類型,同一做用域內不可重名,局部定義覆蓋全局定義。spa

const GLOB_NUM: f64 = 0.0;    // 右值必須符合左值聲明的數據類型,如指定 f64,但右值賦值爲 1,則沒法經過編譯。

fn main() {
    let zvar: i32 = 0;
    let zvar: i32 = zvar + 1;
    let zvar: i32 = zvar * 2;
    let zvar: &str = "Hello World!";
    let zvar = zvar.len();

    const GLOB_NUM: f64 = 1.0;

    println!("{} {}", zvar, GLOB_NUM);
}

4、結構體調試

fn main() {
    #[derive(Debug)]
    struct _T {
        a: i32,
        b: u64,
    }

    let mut _test = _T {a: 0, b: 0};    // 必須斌值,不然後續沒法使用

    _test.a = 8;
    _test.b = 8;

    println!("{} {}\n{:?}", _test.a, _test.b, _test);
}

注:code

  • 結構體類型定義末尾不加分號 ';'
  • 結構體實例定義全部成員變量必須所有初始化
  • #[derive(Debug)] 用於啓用調試打印格式
  • 容許在函數體內定義局部結構體

5、枚舉blog

#[derive(Debug)]
enum _T {
    _A(i32),
    _B(String),
    _C(i64, u32),
    _D,
    _E{x: i32, y: i32},
}

impl _T {
    fn print_self(&self) -> i32 {
        println!("{:?}", self);
        0
    }
}

fn main() {
    let _var = _T::_D;
    let _var0 = _T::_E{x: 1, y:2};

    _var.print_self();
    _var0.print_self();
}
  • rust 的枚舉成員能夠進一步梆定任意類型數據結構
  • 全部成員屬於同一數據類型,方法共享

____作用域

相關文章
相關標籤/搜索