是否可以在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)

但令人不满.

推荐答案

不,没有宏可以对标识符执行这种字符串操作.

在编译器中创建这样一个宏是可能的,但这似乎不是一个普遍的需求;今天,只有实验性的concat_idents!个接近于此(即标识符的字符串式操作).

您的解决方案是目前唯一可用的解决方案.

Rust相关问答推荐

如何在Rust中实现Functor trait?

如何装箱生命周期相关联的两个对象?

Arrow RecordBatch as Polars DataFrame

如何为utoipa中的可选查询参数生成OpenAPI模式?

在Rust中,如果Result是Err,运行副作用(如日志(log)记录)的惯用方法是什么

这是不是在不造成嵌套的情况下从枚举中取出想要的变体的惯用方法?

在决定使用std::Sync::Mutex还是使用Tokio::Sync::Mutex时,操作系统线程调度是考虑因素吗?

无法从流中读取Redis请求

RUST应用程序正在退出,错误代码为:(退出代码:0xc0000005,STATUS_ACCESS_VIOLATION)

零拷贝按步骤引用一段字节

如何防止Cargo 单据和Cargo 出口发布( crate )项目

我可以解构self 参数吗?

Button.set_hexpand(false) 不会阻止按钮展开

Rust中的位移操作对范围有什么影响?

实现AsyncWrite到hyper Sender时发生生命周期错误

特征中定义的类型与一般定义的类型之间的区别

在 Rust 中,将可变引用传递给函数的机制是什么?

您如何使用枚举反序列化字符串,其中任何其他值反序列化为新类型变体同时保留字符串?

Rust:如果我知道只有一个实例,那么将可变borrow 转换为指针并返回(以安抚borrow 判断器)是否安全?

如何阅读 HttpRequest 主体