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

Scala scopt: argument required() based on one or more other arguments

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

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

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

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

如何实现?

我发现 .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")
        )