一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

rust語(yǔ)言基礎(chǔ)學(xué)習(xí): Default trait

冬至子 ? 來(lái)源:山川與湖海 ? 作者:山川與湖海 ? 2023-05-22 16:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Default trait 顧名思義是默認(rèn)值,即Rust為特定類型實(shí)現(xiàn) Default 特性時(shí),可以為該類型賦予了可選的默認(rèn)值。

使用Default trait為類型提供缺省值

Default trait 屬于std::default::Default ,先看一下它的定義:

pub trait Default {
    fn default() -> Self;
}

比較簡(jiǎn)單,為類型實(shí)現(xiàn)Default trait的方式:

  • 如果類型中的包含的其他類型都實(shí)現(xiàn)了Default trait,就可以通過(guò)derive宏

    #[derive(Default)]為類型自動(dòng)實(shí)現(xiàn)Default trait。

  • 手動(dòng)實(shí)現(xiàn)Default trait:impl Defalut for A

  • 枚舉的#[default]屬性

  1. 通過(guò)derive宏#[derive(Default)]和手動(dòng)實(shí)現(xiàn)實(shí)現(xiàn)Default trait結(jié)合

// 假如unpaid和paid不實(shí)現(xiàn)defalut,則編譯無(wú)法通過(guò)

#[derive(Debug)],

pub enum PayStatus {
Unpaid,
Paid,
}

// 為枚舉PayStatus手工實(shí)現(xiàn)
impl Default for PayStatus {
fn default() -> Self {
PayStatus::Unpaid
}
}

// Price的所有字段類型都實(shí)現(xiàn)了Default, 因此可以derive Default
#[derive(Default, Debug)]
pub struct Price {
original_price: f64,
discounted_price: f64,

}

// Order的所有字段類型都實(shí)現(xiàn)了Default,因此可以derive Default
#[derive(Default, Debug)]
pub struct Order {
id: i64,
pay_status: PayStatus,
price: Price,

}

2.枚舉的#[default] 屬性 : enum 枚舉上使用 #[derive(Default)] 時(shí),可以通過(guò)在變體上放置 #[default] 屬性來(lái)簡(jiǎn)化實(shí)現(xiàn)。

#[derive(Default)]
enum Kind {
    #[default]
    A,
    B,
    C,
}
 let kind = Kind::default();
 println!("{:?}", kind); // A

Default trait 使用

Rust是非空類型的,類型需要初始化即賦值,如果沒(méi)有一個(gè)默認(rèn)值,需要寫(xiě)大量冗余代碼給該類型賦初始值,這就需要一種簡(jiǎn)便的方式生成初始值,即Default trait, Rust 為各種原始類型實(shí)現(xiàn) Default。

當(dāng)類型實(shí)現(xiàn)了Default trait之后,在初始化時(shí),可以部分初始化,其余部分使用Default::default()初始化。

fn main() {
   let order1 = Order::default();
   let order2 = Order {
       id: 100,
       ..Order::default()
   };
   println!("order1 = {:?}", order1);
   println!("order2 = {:?}", order2);
}

在泛型編程的語(yǔ)境中,Default trait也可顯其威力和方便性

fn guarantee_length

當(dāng)你在 Option 實(shí)例上使用 unwrap_or_default 方法時(shí), Default trait是必須的。如果 Option 是 None 的話, unwrap_or_default 方法將返回 T 類型的 Default::default 的結(jié)果。

struct Canvas;
enum Shape {
    Circle,
    Rectangle,
}


impl Canvas {
    // let user optionally pass a color
    // 用戶可選地傳入一個(gè) color
    fn paint(&mut self, shape: Shape, color: Option) {
        // if no color is passed use the default color
        // 若用戶沒(méi)有傳入 color ,即使用默認(rèn)的 color
        let color = color.unwrap_or_default();
        // etc
    }
}

總結(jié)

Default trait為類型提供缺省值,即幫你創(chuàng)建一個(gè)類型的默認(rèn)值。派生宏#[derive(Default)]意味著自動(dòng)實(shí)現(xiàn)了 default 函數(shù)。default 函數(shù)的派生實(shí)現(xiàn)調(diào)用了類型每部分的 default 函數(shù),這意味著類型中所有的字段也必須實(shí)現(xiàn)了Default trait 。

為自己的類型(比如結(jié)構(gòu)體,枚舉等)實(shí)現(xiàn)Default trait的方式:

  • 通過(guò)派生宏實(shí)現(xiàn)#[derive(Default)]
  • 通過(guò)手動(dòng)實(shí)現(xiàn) impl Defalut for A
  • 枚舉可以使用#[default]屬性實(shí)現(xiàn)
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Default
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8214
  • rust語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    3143
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    聊聊Rust與C語(yǔ)言交互的具體步驟

    rust FFI 是rust與其他語(yǔ)言互調(diào)的橋梁,通過(guò)FFI rust 可以有效繼承 C 語(yǔ)言的歷史資產(chǎn)。本期通過(guò)幾個(gè)例子來(lái)聊聊
    發(fā)表于 07-06 11:15 ?2087次閱讀

    基于Rust語(yǔ)言Hash特征的基礎(chǔ)用法和進(jìn)階用法

    ,包括Hash trait、HashMap、HashSet等,本教程將詳細(xì)介紹Rust語(yǔ)言Hash特征的基礎(chǔ)用法和進(jìn)階用法。 基礎(chǔ)用法 使用Hash trait
    的頭像 發(fā)表于 09-19 16:02 ?1809次閱讀

    Rust語(yǔ)言中的反射機(jī)制

    Rust語(yǔ)言的反射機(jī)制指的是在程序運(yùn)行時(shí)獲取類型信息、變量信息等的能力。Rust語(yǔ)言中的反射機(jī)制主要通過(guò) Any 實(shí)現(xiàn)。 std::any::Any
    的頭像 發(fā)表于 09-19 16:11 ?2891次閱讀

    Rust語(yǔ)言如何與 InfluxDB 集成

    Rust 是一種系統(tǒng)級(jí)編程語(yǔ)言,具有高性能和內(nèi)存安全性。InfluxDB 是一個(gè)開(kāi)源的時(shí)間序列數(shù)據(jù)庫(kù),用于存儲(chǔ)、查詢和可視化大規(guī)模數(shù)據(jù)集。Rust 語(yǔ)言可以與 InfluxDB 集成,
    的頭像 發(fā)表于 09-30 16:45 ?1477次閱讀

    基于Rust語(yǔ)言中的生命周期

    Rust是一門系統(tǒng)級(jí)編程語(yǔ)言具備高效、安和并發(fā)等特,而生命周期是這門語(yǔ)言中比較重要的概念之一。在這篇教程中,我們會(huì)了解什么是命周期、為什么需要生命周期、如何使用生命周期,同時(shí)我們依然會(huì)使用老朋友
    的頭像 發(fā)表于 09-19 17:03 ?1170次閱讀

    Rust中的From和Into trait的基礎(chǔ)使用方法和進(jìn)階用法

    、可靠和安全的系統(tǒng)級(jí)應(yīng)用的首選語(yǔ)言Rust中的From和Into是兩個(gè)重要的trait,它們可以幫助我們進(jìn)行類型轉(zhuǎn)換。From trait允許我們從一個(gè)類型轉(zhuǎn)換到另一個(gè)類型,而In
    的頭像 發(fā)表于 09-20 10:55 ?2172次閱讀

    Rust 語(yǔ)言中的 RwLock內(nèi)部實(shí)現(xiàn)原理

    Rust是一種系統(tǒng)級(jí)編程語(yǔ)言,它帶有嚴(yán)格的內(nèi)存管理、并發(fā)和安全性規(guī)則,因此很受廣大程序員的青睞。RwLock(讀寫(xiě)鎖)是 Rust 中常用的線程同步機(jī)制之一,本文將詳細(xì)介紹 Rust
    的頭像 發(fā)表于 09-20 11:23 ?1190次閱讀

    如何用 rust 語(yǔ)言開(kāi)發(fā) stm32

    本文介紹如何用 rust 語(yǔ)言開(kāi)發(fā) stm32。開(kāi)發(fā)平臺(tái)為 linux(gentoo)。硬件準(zhǔn)備本文使用的芯片為 STM32F103C8T6。該芯片性價(jià)比較高,價(jià)格低廉,適合入門學(xué)習(xí)。需要
    發(fā)表于 11-26 06:20

    如何利用C語(yǔ)言去調(diào)用rust靜態(tài)庫(kù)呢

    語(yǔ)言的感覺(jué),要做不少的對(duì)接工作。也用過(guò)Lua,感覺(jué)也差不多。評(píng)估學(xué)習(xí)評(píng)估Rust語(yǔ)言時(shí),感覺(jué)性能和體積應(yīng)該都不會(huì)有太大的問(wèn)題。加上語(yǔ)言本身
    發(fā)表于 06-21 10:27

    trait中使用 `async fn`

    { ... } } 更多請(qǐng)看官方blog:https://blog.rust-lang.org/inside-rust/2022/11/17/async-fn-in-trait-nightly.html 社區(qū)受
    的頭像 發(fā)表于 11-23 15:40 ?1018次閱讀

    以調(diào)試Rust的方式來(lái)學(xué)習(xí)Rust

    在我上一篇 關(guān)于 Rustup 的文章 中,我向你們展示了如何安裝 Rust 工具鏈。但是,如果不能上手操作一下 Rust 的話下載工具鏈又有什么用?學(xué)習(xí)任何語(yǔ)言都包括閱讀現(xiàn)有的代碼和
    的頭像 發(fā)表于 01-03 14:56 ?1156次閱讀

    為什么Borrow和BorrowMut被定義為泛型trait呢?

    Borrow和BorrowMut traitRust標(biāo)準(zhǔn)庫(kù)std:borrow 模塊中用于處理借用數(shù)據(jù)的trait,通過(guò)實(shí)現(xiàn)Borrow 和BorrowMut trait可以讓一個(gè)
    的頭像 發(fā)表于 05-22 15:57 ?1192次閱讀

    rust語(yǔ)言基礎(chǔ)學(xué)習(xí): 智能指針之Cow

    Rust中與借用數(shù)據(jù)相關(guān)的三個(gè)trait: Borrow, BorrowMut和ToOwned。理解了這三個(gè)trait之后,再學(xué)習(xí)Rust
    的頭像 發(fā)表于 05-22 16:13 ?3345次閱讀

    實(shí)現(xiàn)Rust Trait類型 那么該類型的引用也實(shí)現(xiàn)了trait嗎?

    如果你在一個(gè)類型上實(shí)現(xiàn)了一個(gè)trait,然后引用了這個(gè)類型,那么類型的引用也實(shí)現(xiàn)了這個(gè)trait嗎?
    的頭像 發(fā)表于 08-28 15:25 ?1554次閱讀

    適合嵌入式設(shè)備開(kāi)發(fā)的編程語(yǔ)言Rust語(yǔ)言

    Rust語(yǔ)言是二十一世紀(jì)的語(yǔ)言新星。Rust被人廣泛承認(rèn)的一點(diǎn),就是因?yàn)樗苓\(yùn)行在多樣的目標(biāo)上,從桌面和服務(wù)器設(shè)備,到資源有限的嵌入式設(shè)備。
    發(fā)表于 09-12 09:39 ?3753次閱讀
    適合嵌入式設(shè)備開(kāi)發(fā)的編程<b class='flag-5'>語(yǔ)言</b>—<b class='flag-5'>Rust</b><b class='flag-5'>語(yǔ)言</b>