当前位置: 首页 > news >正文

HoRain云--Rust 宏

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

宏的定义

实例

实例

实例

过程宏(Procedural Macros)


Rust 宏(Macros)是一种在编译时生成代码的强大工具,它允许你在编写代码时创建自定义语法扩展。

宏(Macro)是一种在代码中进行元编程(Metaprogramming)的技术,它允许在编译时生成代码,宏可以帮助简化代码,提高代码的可读性和可维护性,同时允许开发者在编译时执行一些代码生成的操作。

宏在 Rust 中有两种类型:声明式宏(Declarative Macros)和过程宏(Procedural Macros)。

本文主要介绍声明式宏。

宏的定义

在 Rust 中,使用 macro_rules! 关键字来定义声明式宏。

macro_rules! my_macro { // 模式匹配和展开 ($arg:expr) => { // 生成的代码 // 使用 $arg 来代替匹配到的表达式 }; }

声明式宏使用 macro_rules! 关键字进行定义,它们被称为"macro_rules"宏。这种宏的定义是基于模式匹配的,可以匹配代码的结构并根据匹配的模式生成相应的代码。这样的宏在不引入新的语法结构的情况下,可以用来简化一些通用的代码模式。

下面是一个简单的宏定义的例子:

实例

// 宏的定义
macro_rules! greet {
// 模式匹配
($name:expr) => {
// 宏的展开
println!("Hello, {}!", $name);
};
}

fn main() {
// 调用宏
greet!("World");
}

说明

实例

下面是一个更复杂的例子,演示了如何使用宏创建一个简单的 vec! 宏,以便更方便地创建 Vec:

实例

// 宏的定义
macro_rules! vec {
// 基本情况,空的情况
() => {
Vec::new()
};

// 递归情况,带有元素的情况
($($element:expr),+ $(,)?) => {
{
let mut temp_vec = Vec::new();
$(
temp_vec.push($element);
)+
temp_vec
}
};
}

fn main() {
// 调用宏
let my_vec = vec![1, 2, 3];
println!("{:?}", my_vec); // 输出: [1, 2, 3]

let empty_vec = vec![];
println!("{:?}", empty_vec); // 输出: []
}

在这个例子中,vec! 宏使用了模式匹配,以及 $($element:expr),+ $(,)?) 这样的语法来捕获传递给宏的元素,并用它们创建一个 Vec。

注意,$(,)?) 用于处理末尾的逗号,使得在不同的使用情境下都能正常工作。


过程宏(Procedural Macros)

过程宏是一种更为灵活和强大的宏,允许在编译时通过自定义代码生成过程来操作抽象语法树(AST)。过程宏在功能上更接近于函数,但是它们在编写和使用上更加复杂。

过程宏的类型:

过程宏的实现通常需要使用 proc_macro 库提供的功能,例如 TokenStream 和 TokenTree,以便更直接地操纵源代码。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/998439/

相关文章:

  • VMware Workstation Pro 17虚拟化技术实践指南:免费许可证密钥与完整使用方案
  • 3步掌握Mermaid.js:解决技术文档可视化难题的完整方案
  • 金融行业 AI 落地:科学 ROI 评估与选型落地全实践
  • 2026常州本地黄金铂金白银金条回收哪家靠谱?TOP5 正规实体门店榜单 + 电话地址(更新时间:2026-06-12_11:10:26) - 中安检金银铂钻回收
  • 2026深圳瓷砖空鼓翘边不用砸砖|回南天地砖起拱、填海楼盘沉降空鼓微创修复方案 - 苏易房屋修缮
  • 2026 高位黄金变现 南京正规回收门店排名,首选合扬 - 开心测评
  • 跨境店铺评论自动处理全攻略:基于实在Agent与NLP情感分析的深度落地实操指南
  • 从倒立摆到无人机:李雅普诺夫稳定性理论在实际控制系统设计中的保姆级指南
  • 大兴安岭黄金白银回收铂金旧金回收无套路门店 TOP 榜单 实地测评资料整理(更新时间:2026-06-12_11:10:26) - 诚金汇钻回收公司
  • 长沙手表回收怎么选?2026芙蓉区好店全解析 - 逸程
  • ViT模型真的是‘大力出奇迹’吗?深入聊聊它的数据饥渴症与落地挑战
  • STM32F1软PLC开发套件:FX2N指令兼容+MODBUS RTU+AD/DA采集,含Keil工程与多版原理图
  • 白山黄金白银回收铂金旧金回收无套路门店 TOP 榜单 实地测评资料整理(更新时间:2026-06-12_11:10:26) - 诚金汇钻回收公司
  • 串口数据秒变动态波形图:PyQt5界面+pyqtgraph实时绘图工具
  • 2026苏州本地不干胶标签定制哪家好?源头工厂冠威更靠谱 - 资讯快报
  • 免费PS5手柄PC适配完全指南:如何让DualSense在Windows上完美运行
  • 2026 盘锦卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • Tecno Pova 8 5G 假镜头变点阵屏,是改进还是延续廉价设计?
  • 2026邯郸本地黄金铂金白银金条回收哪家靠谱?TOP5 正规实体门店榜单 + 电话地址(更新时间:2026-06-12_11:10:26) - 中安检金银铂钻回收
  • 思源黑体TTF:打造跨语言设计的专业字体解决方案
  • 从零散工具到企业级AI Agent:2026年企业自动化整合与智能体分步改造方案全攻略
  • 项目紧急迭代、无接口文档时如何开展接口测试
  • HoRain云--Rust 智能指针
  • 2026包头出手黄金铂金白银回收避坑指南 5 家经营多年实体回收门店走访测评 + 详细地址(更新时间:2026-06-12_11:10:26) - 中业金奢再生回收中心
  • 2026崇左出手黄金铂金白银回收避坑指南 5 家经营多年实体回收门店走访测评 + 详细地址(更新时间:2026-06-12_11:10:26) - 中业金奢再生回收中心
  • MCP模型协同协议:AI智能体自治协作的底层通信标准
  • 河南淇滨区黄金回收实测:2026年新规下如何安全变现?这3家30年零差评老店给出答案 - 行行星
  • 原神帧率解锁工具深度解析:突破60帧限制的完整技术指南
  • 2026保定本地黄金铂金白银金条回收哪家靠谱?TOP5 正规实体门店榜单 + 电话地址(更新时间:2026-06-12_11:10:26) - 中安检金银铂钻回收
  • 2026湖北出手黄金铂金白银回收避坑指南 5 家经营多年实体回收门店走访测评 + 详细地址(更新时间:2026-06-12_11:10:26) - 中业金奢再生回收中心