< 返回版块

tch1121 发表于 2023-03-26 01:59

#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
   /// 就是这里的内容
   #[arg(short, long)]
   name: String,
}

评论区

写评论
Snowmanzzz 2023-03-26 10:25

没用过Parser

话说皮卡丘真博学

--
👇
Pikachu: clap用的是过程宏。derive类型的过程宏,其工作方式是获取下面整个struct的token stream,然后输出新的token stream追加在原始内容后面。而注释也是作为token stream的一部分传进去的。

如果还不知道token stream是什么的话,可以先粗糙地把它理解成字符串。

以下是一些资源:

dtolnay的proc macro workshop可以帮你更好地入门proc macro。

https://github.com/dtolnay/proc-macro-workshop

另外,如果你将来要写proc macro的话,下面这个网站把rust代码解析成AST,这可以帮助你更容易地理解。(它还支持更多的语言,你可以自己尝试)

https://astexplorer.net/

Pikachu 2023-03-26 07:12

clap用的是过程宏。derive类型的过程宏,其工作方式是获取下面整个struct的token stream,然后输出新的token stream追加在原始内容后面。而注释也是作为token stream的一部分传进去的。

如果还不知道token stream是什么的话,可以先粗糙地把它理解成字符串。

以下是一些资源:

dtolnay的proc macro workshop可以帮你更好地入门proc macro。

https://github.com/dtolnay/proc-macro-workshop

另外,如果你将来要写proc macro的话,下面这个网站把rust代码解析成AST,这可以帮助你更容易地理解。(它还支持更多的语言,你可以自己尝试)

https://astexplorer.net/

1 共 2 条评论, 1 页