< 返回版块

ugdbg 发表于 2020-07-31 00:05

Tags:macro

如下

/// 加入macro的其中一种类型
enum Foo {
    A,
    B,
}

// 例如如下格式,两种不同的类型,随机顺序传入example!
example!("a", Foo::A, "c", "d", Foo::B);

目前能想到的用$pattern:pat再用regex处理,但是感觉很蹩脚

评论区

写评论
93996817 2020-07-31 09:51

macro_rules! example { () => (); ($e:literal)=>{println!("{} I am literal!",stringify!($e))}; ($e:expr)=> {println!("{} I am expr!" ,stringify!($e))}; ($head:expr, $($tail:expr),) => ( example!($head); example!($($tail),)); }

#[derive(Debug, Clone)] enum Foo { A=1, B=2, }

fn main() { example!("a",Foo::A,Foo::B,"b","c");

/* result "a" I am literal! Foo::A I am expr! Foo::B I am expr! "b" I am literal! "c" I am literal! */ }

作者 ugdbg 2020-07-31 01:07

大概了解了点,没来及测试,同问的同学可以参考下面链接的回答

https://rustcc.cn/article?id=8eef25b7-3754-4e97-97f3-af5f4606271e

1 共 2 条评论, 1 页