Scala scopt:基于一个或多个其他参数的参数 required()

时间:2021-05-11 15:27:17

标签: scala scopt

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

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

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

如果我选择将作业写入雪花,则一组其他参数将成为强制性的。例如,--snowflake_table--snowflake_database

我怎样才能实现它?

1 个答案:

答案 0 :(得分:2)

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

如果指定了父级,在这种情况下,如果 --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")
        )
相关问题