小编MLS*_*ent的帖子

Rust 宏:根据表达式调用函数

我有三个不同的函数,我想根据宏参数调用其中一个函数。这个参数应该被预处理,这就是为什么我认为我需要将其写为expr. 但是,我似乎找不到一种方法来区分expr宏中的不同情况。这是我的代码:

fn func_100(){
    println!("Func 100!");
}
fn func_200(){
    println!("Func 200!");
}
fn func_300(){
    println!("Func 300!");
}

macro_rules! generate_func_call {
    (100) => {
        func_100();
    };
    (200) => {
        func_200();
    };
    (300) => {
        func_300();
    }
}

macro_rules! generate_func_call_wrapper {
    ($func: ident, $number: expr) => {
        fn $func(){
            println!("{:?}", $number / 100);
            generate_func_call!($number);
        }
    };
}

generate_func_call_wrapper!(f1,100);
generate_func_call_wrapper!(f2,200);
generate_func_call_wrapper!(f3,300);

fn main(){
    f1();
}
Run Code Online (Sandbox Code Playgroud)

这会生成以下编译时错误:

    generate_func_call!($number);
                        ^^^^^^^ no rules expected this token in macro call
Run Code Online (Sandbox Code Playgroud)

我如何修复这个程序,以便根据表达式调用不同的函数$number

rust rust-macros

5
推荐指数
1
解决办法
3403
查看次数

标签 统计

rust ×1

rust-macros ×1