Rust编程语言里的宏macro-域宏基金
在前端开发中
像angular,vuejs,react
可以定义组件
然后复用到需要这个功能的地方
网站运行起来后组件所在的地方
就会生成同样模式的代码
后端编程里也有类似的
Python有装饰器
vba里就有一个宏应用
我们来看看rust语言里的宏
它是除了future更重要的概念
它用来对功能和语法的扩展
做可变接口类似println
一般定义宏的语法如下
上面的log是创建的宏的名字
$expres是传入宏的参数
也叫元变量
$crate是关键字元变量
这里用expr指示符或者说片段指示符来说明传入给expr的是表达式
元变量是以$开头的
还有很多其它的指示符
代表可以传入的不同类型的对象
这个宏没有返回值
你可以定义带返回值的
=>左侧的是匹配器
右侧是转换器
以上是对代码形式的说明
下面说说传入的参数
除了上面表示表达式的expr
它还可以是块
用block指示符
可以是变量或者函数
用ident指示符
可以是字面量
用literal指示符
可以是模式
用pat指示符
可以是路径
用path指示符
可以是语句
用stmt指示符
可以是令牌树
用tt指示符
可以是类型
用ty指示符
可以是可见性限定符
用vis指示符
可以是crate的组成部分
用item指示符
item是各种数据结构的定义声明实现等
宏的其它定义用法
可以定义重载
可以有类似数组参数
这是用$(..),+
根据需要+的待选有?和*
在调用宏的时候
注意它有scope的概念
默认是按照
代码在一个或者多个代码文件里
先后顺序的文本域
比如提前调用后面定义的宏
是不行的
这时候需要用路径域path based scope
当调用宏时
是不按照代码顺序去找宏的
macro_use可以用来
指示模块内部定义的宏的作用域
延伸到模块外
它还可以用来导入外部模块的宏
外部模块的宏需要用macro_export导出才可以
宏还有过程宏,下次再说,欢迎交流
- 版权所属:财经引领者
- 本文地址:http://www.cj8821.cn/129264.html
- 版权声明:版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。