当前位置: 首页 > 知识库问答 >
问题:

如何实现“format_args!”这样的复杂宏在用户空间?

乜烨霖
2023-03-14

我喜欢Rust带有很多宏,它们将计算移动到编译时,而不是可重复地移动到运行时。

print!及其所有变体使用format_args!查看源代码是很好的例子。

不幸的是,在源代码中,您会看到注释/*编译器内置*/,而不是直接在源文件中实现。

Rust是否也有能力让用户编写如此复杂的逻辑作为宏?如果是,我该怎么做?

共有1个答案

冯胤
2023-03-14

复杂宏通常以过程宏的形式实现,您可以在Rust编程语言或Rust参考书中了解更多。

您还可以使用所谓的声明性宏来实现非常复杂的事情,看看优秀的《生锈宏小书》。

YouTube上有一些关于这些的讨论,但你可能会发现以下内容特别有趣,这是Chris Wong在RustConf 2018上发表的,我的小程序宏:

 类似资料:
  • 图一: 1、动态时间轴的长短根据起止时间来定的,就是说如果时间更长,结束点有可能继续往下(拐弯)走; 2、灰色表示整个轴的长度,渐变(彩)色表示实际进度; 3、时间轴上的小圆点也是动态的,表示某一天对应的位置; 4、点击时间轴上的白色小圆点,会弹出对应的下拉卡片,卡片有堆叠效果,表示可以继续展开,点击卡片上的蓝色小圆点,则继续展开内容; 图二: 1、点击卡片上蓝色小圆点,展示详细内容,时间轴及其他

  • 我需要一些关于实现spring JPA查询的建议。由于输入长度的原因,我的查询很复杂。 作为输入,我有: 15条件-如果不为空,则检查相等; 2条件-在if not null之间进行检查 此外,输出必须是可分页的。 有其他选择吗? 唯一的方法是用CriteriaBuilder构建一个自定义查询?

  • 柱形图,当该值为0时,加最小高度,然后改造成图中的样式。单纯添加最小高度会贴着轴线而不是居中 有大佬给一下解决思路吗?

  • 要求是这样的(目前的话换行单选多选判断换行展示已经处理完了): 但是现在有个问题就是选项的个数问题,选项最多是9个(也就是从A~I),最少是3~4个(判断的选项就是两个,但是若遇到判断就换行了,倒是不用太操心),选项个数不固定每题的宽度就不固定,宽度不固定列数就不固定,列数有影响到了行数,但又要求每列得对齐。 大致就是: 1.选项个数不固定 2.支持横排、竖排的切换 3.每列得对齐 所以想问问各位

  • 我如何发现它的时间和空间复杂性?

  • 对于回溯算法,计算空间(堆栈空间)和时间复杂度的好方法是什么? 我们希望输出组合的长度正好是K,并且sol集必须是唯一的 输入:arr:[1,2,3,4,5]k:4 输出: [1,2,3,4]//[2,1,3,4]无效,因为它==[1,2,3,4] 最差的时间复杂度是O(n^k),其中n是数组的长度。