位置信息主要与命令目标方法相关:
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]