位置参数
位置信息主要与命令目标方法相关。
CommandRegistration.builder()
.withOption()
.longNames("arg1")
.position(0)
.and()
.build();
请谨慎使用位置参数,因为它很快就会让人难以区分哪些选项与之映射。 |
通常情况下,参数会在命令行中定义选项(长选项或短选项)时映射到选项。一般来说,有选项、选项参数和参数,后者是指未映射到任何特定选项的参数。
无法识别的参数可以具有辅助映射逻辑,其中位置信息非常重要。使用选项位置,您实际上是在告诉命令解析器如何解释普通的原始模糊参数。
让我们看看当我们不定义位置时会发生什么。
CommandRegistration.builder()
.command("arity-strings-1")
.withOption()
.longNames("arg1")
.required()
.type(String[].class)
.arity(0, 2)
.and()
.withTarget()
.function(ctx -> {
String[] arg1 = ctx.getOptionValue("arg1");
return "Hello " + Arrays.asList(arg1);
})
.and()
.build();
选项arg1是必需的,并且没有信息说明如何处理参数`one`,导致缺少选项的错误。
shell:>arity-strings-1 one
Missing mandatory option --arg1.
现在让我们定义位置`0`。
CommandRegistration.builder()
.command("arity-strings-2")
.withOption()
.longNames("arg1")
.required()
.type(String[].class)
.arity(0, 2)
.position(0)
.and()
.withTarget()
.function(ctx -> {
String[] arg1 = ctx.getOptionValue("arg1");
return "Hello " + Arrays.asList(arg1);
})
.and()
.build();
参数会被处理,直到我们得到最多2个参数。
shell:>arity-strings-2 one
Hello [one]
shell:>arity-strings-2 one two
Hello [one, two]
shell:>arity-strings-2 one two three
Hello [one, two]