我可以使用Rust的宏重复检测表达式是否为可变变量吗?

时间:2019-11-14 19:39:40

标签: rust rust-macros

macro_rules! log {
    ($($x:expr),*) => {
        {
            $(
             //how to detect $x in the Macro repetition?

            )*
        }
    };
}

我不想使用($($x:ident),*)log!宏可以记录表达式,然后我要匹配变量类型。

1 个答案:

答案 0 :(得分:3)

宏只能访问令牌流,除了明确地提供给宏的内容外,不能再谈论那些令牌。

例如,考虑以下代码:

fn main() {
    let mut foo: i32 = 1;
    my_macro!(foo);
}

my_macro唯一可用的信息是输入令牌foo。它可以匹配foo是一个标识符,但是不能再说了。宏内部不存在存在称为foo的可变绑定或该绑定为i32的事实。