Positional (位置)
位置資訊主要與命令目標方法相關
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]