AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Rust結構體的定義和實例化

來源: 責編: 時間:2024-01-02 17:28:31 239觀看
導讀結構體特點Rust的結構體跟元組類型比較類似,它們都包含多個相關的值。和元組一樣,結構體的每一部分可以是不同類型。但不同于元組,結構體需要命名各部分數據以便能清楚的表明其值的意義。由于有了這些名字,結構體比元組

結構體特點

Rust的結構體跟元組類型比較類似,它們都包含多個相關的值。和元組一樣,結構體的每一部分可以是不同類型。但不同于元組,結構體需要命名各部分數據以便能清楚的表明其值的意義。由于有了這些名字,結構體比元組更靈活:不需要依賴順序來指定或訪問實例中的值。BH528資訊網——每日最新資訊28at.com

定義結構體,需要使用 struct 關鍵字并為整個結構體提供一個名字。結構體的名字需要描述它所組合的數據的意義。接著,在大括號中,定義每一部分數據的名字和類型,一般稱為 字段(field)。BH528資訊網——每日最新資訊28at.com

BH528資訊網——每日最新資訊28at.com

結構體定義和實例化

下面是一個結構體定義的示例:BH528資訊網——每日最新資訊28at.com

struct User {    active: bool,    username: String,    email: String,    sign_in_count: u64,}

一旦定義了結構體后,為了使用它,通過為每個字段指定具體值來創建這個結構體的 實例。創建一個實例需要以結構體的名字開頭,接著在大括號中使用 key: value 鍵 - 值對的形式提供字段,其中 key 是字段的名字,value 是需要存儲在字段中的數據值。實例中字段的順序不需要和它們在結構體中聲明的順序一致。換句話說,結構體的定義就像一個類型的通用模板,而實例則會在這個模板中放入特定數據來創建這個類型的值。BH528資訊網——每日最新資訊28at.com

下面是一個結構體的應用示例:BH528資訊網——每日最新資訊28at.com

fn main() {    let mut user1 = User {        active: true,        username: String::from("suntiger"),        email: String::from("suntiger@example.com"),        sign_in_count: 1,    };    user1.email = String::from("anotheremail@example.com");}

整體代碼如下:BH528資訊網——每日最新資訊28at.com

BH528資訊網——每日最新資訊28at.com

將代碼進行編譯, 可以發現email的內容被替換了,如圖:BH528資訊網——每日最新資訊28at.com

BH528資訊網——每日最新資訊28at.com

注意看接收結構體實例的user1變量, 前面有mut關鍵字, 這樣方便我們修改結構體成員, 注意整個結構體實例必須是可變的, Rust不允許只將結構體的某個字段標記為可變。BH528資訊網——每日最新資訊28at.com

在函數中使用結構體

先來看一段在函數中返回結構體實例的代碼:BH528資訊網——每日最新資訊28at.com

fn build_user(email: String, username: String) -> User {    User {        active: true,        username: username,        email: email,        sign_in_count: 1,    }}

我們定義了一個build_user 函數,它返回一個帶有給定的 email 和用戶名的 User 結構體實例。active 字段的值為 true,并且 sign_in_count 的值為 1。需要注意同其他任何表達式一樣,我們可以在函數體的最后一個表達式中構造一個結構體的新實例,來隱式地返回這個實例。BH528資訊網——每日最新資訊28at.com

字段初始化簡化方式

為函數參數起與結構體字段相同的名字是可以理解的,但是不得不重復 email 和 username 字段名稱與變量會讓人感到厭煩。如果結構體有更多字段,重復每個名稱就更使人抓狂。還好Rust準備了簡化的方法。BH528資訊網——每日最新資訊28at.com

先看下面的代碼:BH528資訊網——每日最新資訊28at.com

fn build_user(email: String, username: String) -> User {    User {        active: true,        username,        email,        sign_in_count: 1,    }}

參數名與字段名都完全相同,我們可以使用 字段初始化簡寫語法來重寫 build_user,這樣其行為與之前完全相同,無需在字段后面跟上相同名稱的字段內容。BH528資訊網——每日最新資訊28at.com

結構體更新語法

使用舊實例的大部分值但改變其部分值來創建一個新的結構體實例通常是很有用的。這可以通過結構體更新語法實現。BH528資訊網——每日最新資訊28at.com

看下面的應用代碼:BH528資訊網——每日最新資訊28at.com

fn main() {    let user2 = User {        active: user1.active,        username: user1.username,        email: String::from("another@example.com"),        sign_in_count: user1.sign_in_count,    };}

使用結構體更新語法,我們可以通過更少的代碼來達到相同的效果,看下面的代碼:BH528資訊網——每日最新資訊28at.com

fn main() {    let user2 = User {        email: String::from("another@example.com"),        ..user1    };}

.. 語法指定了剩余未顯式設置值的字段應有與給定實例對應字段相同的值。與此同時這段代碼也在 user2 中創建了一個新實例,但該實例中 email 字段的值與 user1 不同,而 username、 active 和 sign_in_count 字段的值與 user1 相同。..user1 必須放在最后,以指定其余的字段應從 user1 的相應字段中獲取其值,但我們可以選擇以任何順序為任意字段指定值,而不用考慮結構體定義中字段的順序。BH528資訊網——每日最新資訊28at.com

元組結構體

也可以定義與元組類似的結構體,稱為 元組結構體。元組結構體有著結構體名稱提供的含義,但沒有具體的字段名,只有字段的類型。當你想給整個元組取一個名字,并使元組成為與其他元組不同的類型時,元組結構體是很有用的,這時像常規結構體那樣為每個字段命名就顯得多余和形式化了。BH528資訊網——每日最新資訊28at.com

要定義元組結構體,以 struct 關鍵字和結構體名開頭并后跟元組中的類型。看下面這段代碼:BH528資訊網——每日最新資訊28at.com

struct Color(i32, i32, i32);struct Point(i32, i32, i32);fn main() {    let black = Color(0, 0, 0);    let origin = Point(0, 0, 0);}

注意 black 和 origin 值的類型不同,因為它們是不同的元組結構體的實例。我們定義的每一個結構體有其自己的類型,即使結構體中的字段可能有著相同的類型。例如,一個獲取 Color 類型參數的函數不能接受 Point 作為參數,即便這兩個類型都由三個 i32 值組成。在其他方面,元組結構體實例類似于元組,你可以將它們解構為單獨的部分,也可以使用 . 后跟索引來訪問單獨的值,等等。BH528資訊網——每日最新資訊28at.com

類單元結構體

我們也可以定義一個沒有任何字段的結構體!它們被稱為 類單元結構體, 因為它們類似于unit 類型。類單元結構體常常在你想要在某個類型上實現 trait 但不需要在類型中存儲數據的時候發揮作用。BH528資訊網——每日最新資訊28at.com

定義代碼如下:BH528資訊網——每日最新資訊28at.com

struct AlwaysEqual;fn main() {    let subject = AlwaysEqual;}

要定義 AlwaysEqual,同樣也使用 struct 關鍵字,然后后面跟想要的名稱,然后是一個分號。不需要花括號或圓括號!然后,我們可以以類似的方式在 subject 變量中獲得 AlwaysEqual 的實例:使用我們定義的名稱,不需要任何花括號或圓括號。想象一下,我們將實現這個類型的行為,即每個實例始終等于每一個其他類型的實例,也許是為了獲得一個已知的結果以便進行測試。我們不需要任何數據來實現這種行為。BH528資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-56424-0.htmlRust結構體的定義和實例化

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 多個線程為競爭資源而相互等待,導致程序無法繼續執行

下一篇: 在 Go 項目中封裝 AES 加解密客戶端接口

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力?! RM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度?! RM軟件市場規模如今超過580
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 共享單車的故事講到哪了?

    來源丨??素斀浥c共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 華為Mate60標準版細節曝光:經典星環相機模組回歸

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • iQOO Neo8系列或定檔5月23日:首發天璣9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
  • 世界人工智能大會國際日開幕式活動在世博展覽館開啟

    30日上午,世界人工智能大會國際日開幕式活動在世博展覽館開啟,聚集國際城市代表、重量級院士專家、國際創新企業代表,共同打造人工智能交流平臺。上海市副市
  • 榮耀Magic4 至臻版 首創智慧隱私通話 強勁影音系統

    2022年第一季度臨近尾聲,在該季度內,許多品牌陸續發布自己的最新產品,讓大家從全新的角度來了解當今的手機技術。手機是電子設備中,更新迭代十分迅速的一款產品,基
Top