默认情况下,宏变量在Rust宏中转义.有没有办法不让他们逃跑?

macro_rules! some {
    ( $var:expr ) => ( "$var" );
}

some!(1) // returns "$var", not "1"

这对于连接编译时字符串等非常有用.

推荐答案

听起来你想要stringify!:

macro_rules! some {
    ( $var:expr ) => ( stringify!($var) );
}

fn main() {
    let s = some!(1);
    println!("{}", s);
}

你可能也想要concat!个.

另见:

Rust相关问答推荐

为什么父作用域中的变量超出了子作用域

捕获Rust因C++异常而产生panic

从Type::new()调用函数

Tokio_Postgres行上未显示退回特性的生存期,且生命周期 不够长

可以为rust构建脚本编写单元测试吗?

将serde_json读入`VEC<;T&>;`( rust 色)时出现问题

为什么RefCell没有与常规引用相同的作用域?

找不到 .has_func 或 .get_func 的 def

如何从宏调用闭包?

如何限制 GtkColumnView 行数

Rust 异步循环函数阻塞了其他future 任务的执行

为什么需要同时为值和引用实现`From`?方法不应该自动解引用或borrow 吗?(2023-06-16)

为什么Rust编译器会忽略模板参数应具有静态生命周期?

全面的 Rust Ch.16.2 - 使用捕获和 const 表达式的 struct 模式匹配

Rust:`sort_by` 多个条件,冗长的模式匹配

如何在 Rust 中将 Vec> 转换为 Vec>?

&self 参数在 trait 的功能中是必需的吗?

在 Rust 中,Weak 如何知道内部值何时被删除?

Iterator::collect如何进行转换?

在传输不可复制的值时实现就地枚举修改