2

我习惯使用 Scalascopt进行命令行选项解析。.required()您可以通过调用刚刚显示的函数来选择参数是否为。

如何定义仅在定义了另一个参数时才需要的参数?例如,我有一个--writeToSnowflake通过 scopt 定义的标志,如下所示:

opt[Unit]("writeToSnowflake")
    .action((_, config) => config.copy(writeToSnowflake = true))

如果我选择将作业写入雪花,则必须有一组其他参数。例如, --snowflake_table,--snowflake_database等。

我怎样才能实现它?

4

1 回答 1

2

我发现.children()可以在.cmd()s 之外使用它来实现我的要求。这是一个例子:

如果指定了父级,在这种情况下,如果--snowflake被“通过”,因此计算结果为True,那么如果是,则子级.required()将抛出错误null(但仅在指定父级时,例如在我的情况下)。

opt[Unit]("snowflake")
        .action((_, config) => config.copy(writeToSnowflake = true))
        .text("optional flag for writing to Snowflake")
        .children(
          opt[Unit]("snowflake_incremental_writing")
            .action((_, config) => config.copy(snowflakeIncrementalWriting = true))
            .text("optional flag for enabling incremental writing"),
          opt[Map[String, String]]("snowflake_options")
            .required()
            .action((snowflakeOptions, config) => config.copy(snowflakeOptions = snowflakeOptions))
            .text("options for writing to snowflake: user, privateKey, warehouse, database, schema, and table")
        )
于 2021-05-17T14:56:52.300 回答