macros - 宏是否可以将标识符变为小写?

标签 macros rust

<分区>

是否可以在 Rust 宏中生成符号或标识符 从一个字符串?或者对标识符执行类似字符串的操作?

我想生成一个给定符号的方法,但需要将其小写为 获取方法名。

get!(B);

// should expand to

fn b() -> B {
    // method body
}

很容易接近...

macro_rules! get {
    ($kind:ident, $method:ident)
        =>
    {
        fn $method() -> $kind {
           // method body
        }
    }
}

get!(B, b)

但不满意。

最佳答案

我刚刚编写了一个过程宏 ( casey) 来执行此操作。

#![feature(proc_macro_hygiene)]

use casey::lower;

lower!(B); // would render as `b`

更新

proc_macro_hygiene 从 rust 1.45.0 开始稳定,因此不再需要 nightly。

关于macros - 宏是否可以将标识符变为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52186081/

相关文章:

c++ - 包含头文件后,先前定义的宏消失了

macros - 如何通过符号宏定义像 ( 和 ) 一样工作的符号?

rust - 为什么这个 Trait 无效?以及使用什么签名来代替?

rust - 是否有相当于python中的 `any`方法

c++ - noexcept 关键字和 _NOEXCEPT 宏有什么区别?

macros - Julia:将包含关键字的代码注入(inject)脚本中

c++ - 什么会使 C++ 预处理器宏成为公认的开发工具?

generics - 为什么即使在 where 子句中使用 "type parameter never used"也是如此?

rust - 无法分配,因为它是在返回包含引用的 Result 的结构的方法中借用的

rust - 为什么元组或结构的大小不是成员的总和?