【问题标题】:Where are clap macros coming from if they are not being imported?如果不导入 clap 宏,它们从何而来?
【发布时间】:2023-01-07 22:19:59
【问题描述】:

在下面的代码 sn-p 中,我没有导入宏 clap 和 arg,但代码仍然可以使用它们。他们来自哪里?

use clap::Parser;

#[derive(Parser, Debug)]
struct Arguments {
    #[clap(short, long)]
    first_part: Option<String>,
    #[arg(short, long)]
    second_part: Option<String>,
}

fn main() {
    let args = Arguments::parse();
    println!("{:?}", args);
}

【问题讨论】:

    标签: rust clap


    【解决方案1】:

    这些不是宏,而是attributes

    混淆是因为 derive 也是一个属性,而不是宏。只有一些派生实现被实现为宏。请记住,! 而非# 可识别普通宏,例如println!

    关于这些属性从何而来?好吧,属性永远不会被导入,这些derive macro helper attributes 被任何可能有效的宏直接解析。是的,这意味着这些属性不受范围限制,理论上可能会在多个板条箱之间发生冲突。据我所知,这还没有发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多