美文网首页
想明白了rust宏,小小记录一下

想明白了rust宏,小小记录一下

作者: 风吹路过的云 | 来源:发表于2021-08-21 09:39 被阅读0次

最近在做一个小项目,作为对rust的应用尝试。web小应用。

例子,也是仿照网上别人的demo做的。web框架用的是warp。在别人的代码里,他用到了宏,照着例子,我也是用宏。

在main.rs里,我是直接引用那个宏,他是把宏再封装在一个server.rs的模块里,在main.rs里引用这个server模块。我想,再封装一层,麻烦了,再说,我现在这个小应用,其实就只有一个url请求,没他那么多,所以就不封装了,在main.rs里直接引用宏。

问题来了,我在编译时,一直报找不到route模块里的函数。这个事,苦恼我很长很长时间,一个月了,还找不到原因(其间有别的事要忙,也没全身心放在这)。

因为我跟原作者的代码没什么区别,我在想,原作者只是封装了一层,他就能跑起来,为啥我不封装那层,我就跑不起来。只好妥协,还是像他那样再封装一层吧,看看我的代码能不能跑起来。于是像模像样的,跟他保持一致,再封装了一层。

果然出乎意料,我的代码也跑起来了,这让我百思不得其解,为啥啊!!仔细做了对比,他所在的server.rs里在引用模块时没有mod,只有use,use了对应的模块。

我们都在main.rs里有mod了相应的模块的。

这再一次让我百思不解,为何这样能正常跑起来的。这一天又过去了,确实也还没想明白。

到了晚上,洗澡时,脑子一下子想明白了。所谓宏,宏是写rust代码的代码,跟函数是有区别的,由于宏是写rust代码的代码,所有教程都说宏在编译期是会展开的。它会展开的,展开的。。。。这下我明白了!!!

宏会展开,它跟函数的区别就在这,它展开后,在它所在的位置里生成了代码,它不是函数,在运行到它的位置时,进入函数里的代码。自己一直以来思维里都隐隐约约的以为当运行到宏的位置时,它像函数一样进入函数里面的代码继而接着执行。

由于它是在编译期展开,在它所在的位置生成代码,因为我的main.rs里只是mod了它需要的模块,没有use,所以编译器告诉我它找不到route里面的函数,因为原作者的server.rs里是有use它所需的模块的。这下我就明白了。

经过这个事实,宏是编译期展开,函数是运行时进入。这个思维转变很重要,非常重要,终于明白宏与函数的区别!!!!

所以,都说学rust有一个陡峭的学习过程,而且有别的语言基础的会发生思维转变。果然是这样啊!!!

记录一下自己的思考过程,至于代码就不贴了,因为是一个很蠢的过程

相关资料

https://dev.to/steadylearner/how-to-use-rust-warp-web-framework-2b4e 原作者的小例子

相关文章

  • 想明白了rust宏,小小记录一下

    最近在做一个小项目,作为对rust的应用尝试。web小应用。 例子,也是仿照网上别人的demo做的。web框架用的...

  • 关于rust的“宏”

    一、概述 为了解决rust语法元素的扩展,并能复用现有的代码,在rust编写的程序中普遍使用宏.通过宏定义和宏调用...

  • Rust简明学习手册 - Rust安装和基本概念

    前言 好久没学新语言了,最近打算学学Rust并记录一下Rust的要点,方便后期给自己参考。 快速安装 Macos ...

  • vs code 配置rust开发环境

    实现的需求: 查看宏定义,代码补全, 安装这三个插件: Rust,Rust Test Lens,rust-anal...

  • Rust语言编程实例100题-048

    Rust语言编程实例100题-048 题目:Rust 对宏(macro)有着非常好的支持。宏能够使得你能够通过写代...

  • ios宏的使用和技巧

    替换字符 简单函数宏 复杂函数宏 之前的内容很容易明白了对吧,不过复杂的函数宏就没那么容易明白了。先看一下宏中的一...

  • MacOS 上如何安装 Rust

    由于想尝试一下 actix-web,需要安装 Rust,所以这里介绍下 MacOS 如何安装 Rust。 安装 安...

  • 【RUST_BASIC】Rust 宏

    参考 https://kaisery.github.io/trpl-zh-cn/ch19-06-macros.ht...

  • 宏(Macro)指的是 Rust 中一系列的功能 声明(Declarative)宏, 使用macro_rules!...

  • rust--宏

网友评论

      本文标题:想明白了rust宏,小小记录一下

      本文链接:https://www.haomeiwen.com/subject/bvhfiltx.html