根据宏参数 rust 的值创建代码

问题描述 投票:0回答:1
macro_rules! retry_put {
($mod_name:ident, $data_type:ty) => {{
    fn $mod_name() {
      // somelike
       if $mod_name == "red" {
       // generate code written here and not the one in else block
         return u8;
       }
       else {
       // generate code written here and not the one in if
         return "string";
       }
     }
   }
  }

我试图基本上根据输入更改返回类型,如果输入为 true,则返回字符串,否则返回 int。

或者也许举个例子,说明我们在宏中接受一个参数,如果它是偶数,则计算 5 的阶乘并将其作为整数返回,如果参数是奇数,则计算 5 的阶乘并将其作为字符串返回。并且两个函数的名称应该相同。以及计算5的逻辑!不应该重复。

rust macros
1个回答
1
投票

您可以像这样重载宏:

macro_rules! retry_put {
(red, $data_type:ty) => {{
    fn red() {
      return u8;
     }
   }
  }
($mod_name:ident, $data_type:ty) => {{
    fn $mod_name() {
      return "string";
     }
   }
  }
}

参见宏规则!

© www.soinside.com 2019 - 2024. All rights reserved.