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

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

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

如何利用Rust過程宏實現(xiàn)derive-with庫呢?

jf_wN0SrCdH ? 來源:Rust語言中文社區(qū) ? 2024-01-25 09:51 ? 次閱讀

作用

通過派生宏 #[derive(With)] 給結(jié)構(gòu)體字段生成 with_xxx 方法,通過鏈?zhǔn)秸{(diào)用 with_xxx 方法來構(gòu)造結(jié)構(gòu)體。

使用方法

1.給 named struct 每個字段生成 with_xxx 方法

#[derive(With)]
pubstructFoo{
puba:i32,
pubb:String,
}

宏生成代碼

implFoo{
pubfnwith_a(mutself,a:implInto)->Self{
self.a=a.into();
self
}
pubfnwith_b(mutself,b:implInto)->Self{
self.b=b.into();
self
}
}

2.給 tuple struct 每個字段生成 with_xxx 方法

#[derive(With)]
pubstructBar(i32,String);

宏生成代碼

implBar{
pubfnwith_0(mutself,field_0:implInto)->Self{
self.0=field_0.into();
self
}
pubfnwith_1(mutself,field_1:implInto)->Self{
self.1=field_1.into();
self
}
}

3.通過字段名給 named struct 指定字段實現(xiàn) with_xxx 方法

#[derive(With)]
#[with(a)]
pubstructFoo{
puba:i32,
pubb:String,
}

宏生成代碼

implFoo{
pubfnwith_a(mutself,a:implInto)->Self{
self.a=a.into();
self
}
}

4.通過下標(biāo)給 tuple struct 指定字段生成 with_xxx 方法

#[derive(With)]
#[with(1)]
pubstructBar(i32,String);

宏生成代碼

implBar{
pubfnwith_1(mutself,field_1:implInto)->Self{
self.1=field_1.into();
self
}
}

也支持結(jié)構(gòu)體中含有泛型、生命周期、引用等。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • rust語言
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    2988

原文標(biāo)題:【大家的項目】利用 Rust 過程宏實現(xiàn)的 derive-with 庫

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在Rust中連接和使用MySQL數(shù)據(jù)

    MySQL是一個廣泛使用的關(guān)系型數(shù)據(jù),Rust作為一門相對較新的系統(tǒng)級編程語言,具有C語言般的高性能、安全、并發(fā)等特性,因此與MySQL一起使用是一種非常有趣的選擇。在本教程中,我們將手把手地展示
    的頭像 發(fā)表于 09-30 17:05 ?1404次閱讀

    如何使用Serde進(jìn)行序列化和反序列化

    Serde 是一個用于序列化和反序列化 Rust 數(shù)據(jù)結(jié)構(gòu)的。它支持 JSON、BSON、YAML 等多種格式,并且可以自定義序列化和反序列化方式。Serde 的特點是代碼簡潔、易于使用、性能高效
    的頭像 發(fā)表于 09-30 17:09 ?1160次閱讀

    如何使用Rust的標(biāo)準(zhǔn)和structopt來處理控制臺參數(shù)

    Rust是一種安全、高效的系統(tǒng)編程語言,其標(biāo)準(zhǔn)以及外部提供了很多處理控制臺參數(shù)的方式。在本篇文章中,我們將分別介紹如何使用Rust的標(biāo)準(zhǔn)
    的頭像 發(fā)表于 09-20 11:13 ?1112次閱讀

    如何對gcc編譯過程中生成的進(jìn)行調(diào)試

    如何對gcc編譯過程中生成的進(jìn)行調(diào)試?有哪幾種形式?如何對一個函數(shù)進(jìn)行g(shù)prof方式的剖析
    發(fā)表于 12-24 07:53

    如何利用C語言去調(diào)用rust靜態(tài)

    感覺比較合適。但如果把主要工作切過來,感覺Rust目前又太荒蕪了,而且上面的問題也同樣存在。嘗試了解到Rust可以編譯成靜態(tài),于是動了只用Rust
    發(fā)表于 06-21 10:27

    Rust代碼中加載靜態(tài)時,出現(xiàn)錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    “ [i]malloc ”、“ [i]exit ”。我驗證了使用 ` [i]nm ` 命令。 問題是我打算使用 ffi 在 rust 中使用這個靜態(tài)。當(dāng)我嘗試在我的 Rust 代碼中加載靜態(tài)
    發(fā)表于 06-09 08:44

    Rust 1.15 引入自定義derive特性有什么做用

    Rust核心團(tuán)隊發(fā)布了Rust 1.15穩(wěn)定版,新增了備受期待的自定義derive特性,讓代碼生成工具(如Serde和Diesel)能最大效能地工作。
    發(fā)表于 05-17 18:05 ?0次下載
    <b class='flag-5'>Rust</b> 1.15 引入自定義<b class='flag-5'>derive</b>特性有什么做用

    Rust GUI 發(fā)展現(xiàn)狀

    Rust GUI 發(fā)展現(xiàn)狀 最近有一篇關(guān)于 Rust GUI 的博客,這不,kas?這個? Another GUI toolkit ?框架也針對 Rust 的 GUI 框架現(xiàn)狀進(jìn)行了
    的頭像 發(fā)表于 12-21 15:00 ?2515次閱讀

    Chromium正式開始支持Rust

    ? Chromium 正式開始支持 Rust 目前的支持只是第一階段,在C++代碼中使用Rust寫的第三方(編譯成.so)。估計明年Chromium的二進(jìn)制發(fā)行文件中會包含rust
    的頭像 發(fā)表于 01-14 10:04 ?855次閱讀

    為什么我們從C++語言轉(zhuǎn)向Rust語言?

    gtk4-rs代碼包含GTK4的Rust crates。還有個龐大的GObject生態(tài)系統(tǒng),其中許多基于gtk-rs中包含的Rust
    的頭像 發(fā)表于 02-17 17:45 ?985次閱讀

    基于Rust的Log日志介紹

    了一種簡單的方法來實現(xiàn)日志記錄,本文將介紹如何使用Rust的Log作為日志門面,并結(jié)合env_logger和log4rs兩個日志的實戰(zhàn)用例進(jìn)行深入探討。
    的頭像 發(fā)表于 09-19 14:49 ?3155次閱讀

    Rust的標(biāo)準(zhǔn)的功能劃分

    對于大部分軟件開發(fā)工程師而言,他們用Rust主要開發(fā)應(yīng)用層軟件,也就是運(yùn)行在用戶空間的程序。它們基于標(biāo)準(zhǔn)編寫,實現(xiàn)各種業(yè)務(wù)功能。應(yīng)用層的軟件并非所有模塊和函數(shù)都涉及到系統(tǒng)調(diào)用(例如一些用于操作字符串和處理錯誤的函數(shù),就無需調(diào)用
    的頭像 發(fā)表于 10-29 17:17 ?1123次閱讀
    <b class='flag-5'>Rust</b>的標(biāo)準(zhǔn)<b class='flag-5'>庫</b>的功能劃分

    FastTime-純Rust編寫的高并發(fā)快速時間

    FastTime, 純Rust編寫的快速時間, 并發(fā): 2800萬+/秒. 一、組件
    的頭像 發(fā)表于 11-06 09:23 ?490次閱讀

    基于Rust的嵌入式符合ACID的鍵值數(shù)據(jù)

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數(shù)據(jù)
    的頭像 發(fā)表于 12-28 11:29 ?764次閱讀

    如何用Rust過程魔法簡化SQL函數(shù)

    這是 RisingWave 中一個 SQL 函數(shù)的實現(xiàn)。只需短短幾行代碼,通過在 Rust 函數(shù)上加一行過程,我們就把它包裝成了一個 SQL 函數(shù)。
    的頭像 發(fā)表于 01-23 09:43 ?688次閱讀
    如何用<b class='flag-5'>Rust</b><b class='flag-5'>過程</b><b class='flag-5'>宏</b>魔法簡化SQL函數(shù)<b class='flag-5'>呢</b>?