第 31 天:微距狂熱,增強您的 Rust 代碼!

https://medium.com/@aniketbotre007/day-31-macro-mania-supercharge-your-rust-code-675f41b35f3b

第 31 天:巨集狂熱,超級改造你的 Rust 代碼!

🔮🧙‍♂️過程式巨集:代碼巫師🧙‍♂️🔮

我們巨集之旅的下一站是過程式巨集。這就像 Rust 世界的巫師。它們不僅僅是重複代碼,還可以將代碼轉換。就像他們揮舞魔杖,把青蛙變成王子,或將代碼塊變成更高效、更流暢的版本一樣。🐸👉🤴

過程式巨集更像函數,可以接受代碼作為輸入,對該代碼進行操作,並產生代碼作為輸出。這些巨集的輸入是程序文本中的一系列記號,輸出則是替換巨集調用的新記號序列。它們是在自己的 crate 中定義的,有一種特殊的 crate 類型。

有三種類型的過程式巨集:自定義衍生、屬性樣式和函數樣式巨集。每種類型都有其獨特的魅力和用例。

🎁✨自定義衍生巨集✨🎁

自定義衍生巨集允許我們在結構體和枚舉上實現特性。想像它像是給你的代碼送上生日禮物。這裡有一段代碼片段:

use serde::Serialize;

#[derive(Serialize)]
struct Point {
x: i32,
y: i32,
}

fn main() {
let point = Point { x: 1, y: 2 };
let serialized = serde_json::to_string(&point).unwrap();

println!(“序列化:{}”, serialized);
}

在這個例子中,我們使用 serde crate 的自定義衍生巨集 #[derive(Serialize)],使我們的 Point 結構體可以序列化為 JSON。輸出將是:

序列化:{“x”:1,”y”:2}

🏷🌈屬性樣式巨集🌈🏷

屬性樣式巨集就像是你代碼的個人造型師;它們為你的函數、結構和模塊進行裝飾。

use rocket::get;
use rocket::routes;
use rocket::Rocket;

#[get(“/”)]
fn index() -> &’static str {
“Hello, world!”
}

fn rocket() -> Rocket {
rocket::ignite().mount(“/”, routes![index])
}

在上面的代碼中,#[get(“/”)] 是一個屬性樣式巨集,用於確定我們網絡應用的路由。

📞🎉函數樣式巨集🎉📞

函數樣式巨集就像具有更多花俏特色的函數。它們可以接受任意數量的參數,並根據輸入返回一些東西。

println!(“Hello, {}”, “world”); // Hello, world

在這裡,println! 是一個函數樣式巨集,用於向控制台打印。

via Rust on Medium

February 2, 2024 at 02:39AM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *