日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Rust結(jié)構(gòu)體的定義和實(shí)例化

來源: 責(zé)編: 時(shí)間:2024-01-02 17:28:31 217觀看
導(dǎo)讀結(jié)構(gòu)體特點(diǎn)Rust的結(jié)構(gòu)體跟元組類型比較類似,它們都包含多個(gè)相關(guān)的值。和元組一樣,結(jié)構(gòu)體的每一部分可以是不同類型。但不同于元組,結(jié)構(gòu)體需要命名各部分?jǐn)?shù)據(jù)以便能清楚的表明其值的意義。由于有了這些名字,結(jié)構(gòu)體比元組

結(jié)構(gòu)體特點(diǎn)

Rust的結(jié)構(gòu)體跟元組類型比較類似,它們都包含多個(gè)相關(guān)的值。和元組一樣,結(jié)構(gòu)體的每一部分可以是不同類型。但不同于元組,結(jié)構(gòu)體需要命名各部分?jǐn)?shù)據(jù)以便能清楚的表明其值的意義。由于有了這些名字,結(jié)構(gòu)體比元組更靈活:不需要依賴順序來指定或訪問實(shí)例中的值。4Eg28資訊網(wǎng)——每日最新資訊28at.com

定義結(jié)構(gòu)體,需要使用 struct 關(guān)鍵字并為整個(gè)結(jié)構(gòu)體提供一個(gè)名字。結(jié)構(gòu)體的名字需要描述它所組合的數(shù)據(jù)的意義。接著,在大括號中,定義每一部分?jǐn)?shù)據(jù)的名字和類型,一般稱為 字段(field)。4Eg28資訊網(wǎng)——每日最新資訊28at.com

4Eg28資訊網(wǎng)——每日最新資訊28at.com

結(jié)構(gòu)體定義和實(shí)例化

下面是一個(gè)結(jié)構(gòu)體定義的示例:4Eg28資訊網(wǎng)——每日最新資訊28at.com

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

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

下面是一個(gè)結(jié)構(gòu)體的應(yīng)用示例:4Eg28資訊網(wǎng)——每日最新資訊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");}

整體代碼如下:4Eg28資訊網(wǎng)——每日最新資訊28at.com

4Eg28資訊網(wǎng)——每日最新資訊28at.com

將代碼進(jìn)行編譯, 可以發(fā)現(xiàn)email的內(nèi)容被替換了,如圖:4Eg28資訊網(wǎng)——每日最新資訊28at.com

4Eg28資訊網(wǎng)——每日最新資訊28at.com

注意看接收結(jié)構(gòu)體實(shí)例的user1變量, 前面有mut關(guān)鍵字, 這樣方便我們修改結(jié)構(gòu)體成員, 注意整個(gè)結(jié)構(gòu)體實(shí)例必須是可變的, Rust不允許只將結(jié)構(gòu)體的某個(gè)字段標(biāo)記為可變。4Eg28資訊網(wǎng)——每日最新資訊28at.com

在函數(shù)中使用結(jié)構(gòu)體

先來看一段在函數(shù)中返回結(jié)構(gòu)體實(shí)例的代碼:4Eg28資訊網(wǎng)——每日最新資訊28at.com

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

我們定義了一個(gè)build_user 函數(shù),它返回一個(gè)帶有給定的 email 和用戶名的 User 結(jié)構(gòu)體實(shí)例。active 字段的值為 true,并且 sign_in_count 的值為 1。需要注意同其他任何表達(dá)式一樣,我們可以在函數(shù)體的最后一個(gè)表達(dá)式中構(gòu)造一個(gè)結(jié)構(gòu)體的新實(shí)例,來隱式地返回這個(gè)實(shí)例。4Eg28資訊網(wǎng)——每日最新資訊28at.com

字段初始化簡化方式

為函數(shù)參數(shù)起與結(jié)構(gòu)體字段相同的名字是可以理解的,但是不得不重復(fù) email 和 username 字段名稱與變量會讓人感到厭煩。如果結(jié)構(gòu)體有更多字段,重復(fù)每個(gè)名稱就更使人抓狂。還好Rust準(zhǔn)備了簡化的方法。4Eg28資訊網(wǎng)——每日最新資訊28at.com

先看下面的代碼:4Eg28資訊網(wǎng)——每日最新資訊28at.com

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

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

結(jié)構(gòu)體更新語法

使用舊實(shí)例的大部分值但改變其部分值來創(chuàng)建一個(gè)新的結(jié)構(gòu)體實(shí)例通常是很有用的。這可以通過結(jié)構(gòu)體更新語法實(shí)現(xiàn)。4Eg28資訊網(wǎng)——每日最新資訊28at.com

看下面的應(yīng)用代碼:4Eg28資訊網(wǎng)——每日最新資訊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,    };}

使用結(jié)構(gòu)體更新語法,我們可以通過更少的代碼來達(dá)到相同的效果,看下面的代碼:4Eg28資訊網(wǎng)——每日最新資訊28at.com

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

.. 語法指定了剩余未顯式設(shè)置值的字段應(yīng)有與給定實(shí)例對應(yīng)字段相同的值。與此同時(shí)這段代碼也在 user2 中創(chuàng)建了一個(gè)新實(shí)例,但該實(shí)例中 email 字段的值與 user1 不同,而 username、 active 和 sign_in_count 字段的值與 user1 相同。..user1 必須放在最后,以指定其余的字段應(yīng)從 user1 的相應(yīng)字段中獲取其值,但我們可以選擇以任何順序?yàn)槿我庾侄沃付ㄖ担挥每紤]結(jié)構(gòu)體定義中字段的順序。4Eg28資訊網(wǎng)——每日最新資訊28at.com

元組結(jié)構(gòu)體

也可以定義與元組類似的結(jié)構(gòu)體,稱為 元組結(jié)構(gòu)體。元組結(jié)構(gòu)體有著結(jié)構(gòu)體名稱提供的含義,但沒有具體的字段名,只有字段的類型。當(dāng)你想給整個(gè)元組取一個(gè)名字,并使元組成為與其他元組不同的類型時(shí),元組結(jié)構(gòu)體是很有用的,這時(shí)像常規(guī)結(jié)構(gòu)體那樣為每個(gè)字段命名就顯得多余和形式化了。4Eg28資訊網(wǎng)——每日最新資訊28at.com

要定義元組結(jié)構(gòu)體,以 struct 關(guān)鍵字和結(jié)構(gòu)體名開頭并后跟元組中的類型。看下面這段代碼:4Eg28資訊網(wǎng)——每日最新資訊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 值的類型不同,因?yàn)樗鼈兪遣煌脑M結(jié)構(gòu)體的實(shí)例。我們定義的每一個(gè)結(jié)構(gòu)體有其自己的類型,即使結(jié)構(gòu)體中的字段可能有著相同的類型。例如,一個(gè)獲取 Color 類型參數(shù)的函數(shù)不能接受 Point 作為參數(shù),即便這兩個(gè)類型都由三個(gè) i32 值組成。在其他方面,元組結(jié)構(gòu)體實(shí)例類似于元組,你可以將它們解構(gòu)為單獨(dú)的部分,也可以使用 . 后跟索引來訪問單獨(dú)的值,等等。4Eg28資訊網(wǎng)——每日最新資訊28at.com

類單元結(jié)構(gòu)體

我們也可以定義一個(gè)沒有任何字段的結(jié)構(gòu)體!它們被稱為 類單元結(jié)構(gòu)體, 因?yàn)樗鼈冾愃朴趗nit 類型。類單元結(jié)構(gòu)體常常在你想要在某個(gè)類型上實(shí)現(xiàn) trait 但不需要在類型中存儲數(shù)據(jù)的時(shí)候發(fā)揮作用。4Eg28資訊網(wǎng)——每日最新資訊28at.com

定義代碼如下:4Eg28資訊網(wǎng)——每日最新資訊28at.com

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

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

本文鏈接:http://www.www897cc.com/showinfo-26-56424-0.htmlRust結(jié)構(gòu)體的定義和實(shí)例化

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 多個(gè)線程為競爭資源而相互等待,導(dǎo)致程序無法繼續(xù)執(zhí)行

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60 Pro官方停產(chǎn) 第三方瞬間漲價(jià)

    雖然沒有官方宣布,但Redmi的一些高管也已經(jīng)透露了,Redmi K60 Pro已經(jīng)停產(chǎn)且不會補(bǔ)貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機(jī)在停產(chǎn)之后
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動,畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個(gè)移動端新品,不會像安卓廠商,一
  • 容量越大越不壞?24萬塊硬盤故障率報(bào)告公布 這些產(chǎn)品零故障

    8月5日消息,云存儲服務(wù)商Backblaze發(fā)布了最新的硬盤故障率報(bào)告,年故障率有所上升。Backblaze發(fā)布的硬盤季度統(tǒng)計(jì)數(shù)據(jù),其中包括故障率等重要方面。這些結(jié)
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個(gè)流處理程序
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實(shí)用文檔、數(shù)據(jù)圖表及個(gè)性化定制服務(wù)。優(yōu)點(diǎn):OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個(gè)月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當(dāng)時(shí)用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會上,幾個(gè)財(cái)經(jīng)圈媒體大佬就“胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道”展開討論。有
  • iQOO Neo8 Pro真機(jī)諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機(jī)型,不僅搭載了天璣9000+,而且是同價(jià)位唯一一款天璣9000+直屏旗艦,一經(jīng)上市便受到了用戶的廣泛關(guān)注。在時(shí)隔半年后,
  • OPPO K11搭載高性能石墨散熱系統(tǒng):旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發(fā)布會,屆時(shí)全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣點(diǎn)就是將配備索尼
Top 主站蜘蛛池模板: 长垣县| 青州市| 丰宁| 拉萨市| 开江县| 洛阳市| 利津县| 乐平市| 郓城县| 德州市| 衢州市| 平泉县| 乳源| 平江县| 贵溪市| 股票| 株洲县| 常熟市| 娱乐| 阿荣旗| 班玛县| 南城县| 山阴县| 沧源| 辽中县| 海阳市| 扶绥县| 米脂县| 都昌县| 黑龙江省| 北海市| 晋宁县| 手游| 奎屯市| 定襄县| 类乌齐县| 罗城| 巨野县| 孝义市| 江达县| 南部县|