我有三个不同的函数,我想根据宏参数调用其中一个。这个参数应该是预处理的,这就是为什么我认为我需要把它写成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();
}
这会产生以下编译时错误:
generate_func_call!($number);
^^^^^^^ no rules expected this token in macro call
如何修复这个程序,以便根据$number
表达式调用不同的函数?