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")
)
我习惯使用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")
)