gpt4 book ai didi

rust - 如何从一个程序宏调用另一个程序宏?

转载 作者:行者123 更新时间:2023-11-29 08:00:56 25 4
gpt4 key购买 nike

我想编写两个程序宏 - 一个是我的,第二个来自另一个 crate 。

我想像调用普通函数一样调用过程宏。标记为 #[proc_macro_derive] 的函数是公开的,但我无法从我的宏中调用它:编译器找不到该函数。我认为过程宏函数仅在代码生成期间使用,在编译期间不会出现在最终代码中。

我可以生成具有 #[derive(...)] 的代码,编译器将调用第二个宏,但这种方法需要最终用户依赖第二个宏包,即使他们没有直接使用它。

有什么方法可以像普通函数一样调用过程宏,它接受标记并返回标记?

最佳答案

我找到了最简单情况的解决方法,其中必须在第一个过程宏之后调用第二个过程宏:

  1. 创建一个不是程序宏包的单独包
  2. 在 Cargo.toml 和 lib.rs 中包含两个过程宏作为依赖项,为两个 crate 添加 #[macro_use] extern crate ...
  3. 让第一个宏用#[derive(SecondProcMacro)]生成代码

这样一来,用户只需添加一个依赖项:包含两个过程宏的包。

如果我想对其他程序宏的输出进行后处理,我仍然不知道该怎么做。

关于rust - 如何从一个程序宏调用另一个程序宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49140854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com