Rust基本語法整理一

整理來自Rust中文前幾章節,到包、Crates與模塊.已經看了第二遍,知識點還是容易忘記,整理記錄一下,方便查閱.
Rust中文

x.0;元祖
let a: [i32; 5] = [1, 2, 3, 4, 5];
fn關鍵字
表達式和語句 表達式用於返回值,無冒號
因爲 if 是一個表達式,我們可以在 let 語句的右側使用它
棧中的所有數據都必須佔用已知且固定的大小已實現COPY
字符串字面值不可變性在棧上
String存在堆上,因爲大小未知

        let x = 5;
        let y = x;
        println!("{}",x)
    棧上數據沒問題,實現了copy trait
        let s1 = String::from("hello");
        let s2 = s1;
        println!("{}",s1)        
   堆上數據報錯,s1被move給了s2

Rust 永遠也不會自動創建數據的 “深拷貝" clone
Drop trai和Copy trait不可同時出現
元組,當且僅當其包含的類型也都是 Copy 的時候。比如,(i32, i32) 是 Copy 的,但 (i32, String) 就不是。
我們將獲取引用作爲函數參數稱爲 借用(borrowing)

  • 引用產生生命週期問題

iter 方法返回集合中的每一個元素,而 enumerate 包裝 iter 的結果並返回一個元組
let slice = &s[..];
字符串slice的類型聲明&str

  • 當擁有某值的不可變引用時,就不能再獲取一個可變引用

數組slice &[i32]
字段初始化簡寫語法
..user1結構體更新語法
struct Color(i32, i32, i32);元組結構體
類單元結構體()

  • &self只是借用

自動引用和解引用
當使用 object.something() 調用方法時,Rust 會自動爲 object 添加 &、&mut 或 * 以便使 object 與方法簽名匹配
::關聯函數用於構造對象,.屬於結構體方法
match 一個枚舉,綁定其中的值到一個變量,接着根據其值執行代碼

  • if let 語法讓我們以一種不那麼冗長的方式結合 if 和 let,來處理只匹配一個模式的值而忽略其他模式的情況
  • 可以認爲 if let 是 match 的一個語法糖

路徑(path)是一個命名例如結構體、函數或模塊等項的方式
因爲 Cargo 創建了 Cargo.toml,這意味着現在我們有了一個包。如果查看 Cargo.toml 的內容,會發現並沒有提到 src/main.rs。然而,Cargo 的約定是如果在代表包的 Cargo.toml 的同級目錄下包含 src 目錄且其中包含 main.rs 文件的話,Cargo 就知道這個包帶有一個與包同名的二進制 crate
包可以帶有多個二進制 crate,需將其文件置於 src/bin 目錄;每個文件將是一個單獨的二進制 crate。

絕對路徑(absolute path)從 crate 根開始,以 crate 名或者字面值 crate 開頭。
相對路徑(relative path)從當前模塊開始,以 self、super 或當前模塊的標識符開頭。
use self:🔉:instrument;在lib下面使用
對於結構體、枚舉和其它項,通過 use 指定項的全路徑是習慣用法
as防止同名衝突
可以結合 pub 和 use。這個技術被稱爲 “重導出”(re-exporting)
use std::io::{self, Write};合併兩個use導入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章