亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

定義一個同時具有強制參數和可選參數的選項

定義一個同時具有強制參數和可選參數的選項

慕碼人2483693 2022-09-28 15:37:23
我目前正在嘗試提出一種構建命令行選項的方法,該方法在提供時可以采用一個必需的參數或第二個可選參數(除了必需的參數之外)。我試圖使用阿帕奇公地CLI來實現這一點。即我的程序 -a [整數]myProgram -a "test" --> isValid myProgram -a "test" 2 --> also isValid我試過:Option.builder("a").hasArg().numberOfArgs(2).optionalArg(true).build();&Option.builder("a").hasArg().numberOfArgs(2).build();這兩者都沒有按預期工作。第一個示例使兩個參數都是可選的,它允許傳遞違反要求的空參數。第二個示例使這兩個參數都成為必需參數,并且在僅提供字符串類型 arg 時失敗。我已經查看了commons cli的文檔,但他們提供的用例沒有涉及像這樣的復雜案例,同樣也沒有從api文檔中獲得太多細節。我希望程序在沒有值的情況下提供 -a 時失敗,但在提供 1 或 2 個參數時會成功,如前面所示。
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

過去,在這些情況下,我增加了第二個選項。所以在你的例子中,-b。

-b [bvalue]   If -a is enabled, ensure that it uses bvalue to thinginate.

如果第二個(可選)值充當標志,則它可以只是一個布爾標志。

如果第二個(可選)值是一些更任意的輸入,則第二個選項可以采用單個必需的參數。

雖然我相信你有理由把你的參數組織成,但它通常會導致一個更有用的命令行,無論如何都沒有這些多層的可選性(即選項中存在第二位可選值)。您可以將其視為兩級和三級嵌套菜單之間的UX差異。由于項目數量有限,兩級菜單通常更可用。(如果沒有更具體的用例細節,答案必須是泛泛而談的。-a reqdval optval


查看完整回答
反對 回復 2022-09-28
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

所以你有一個選項,可以提供零個或一個時間,可以有一個或兩個值?

final Options options = new Options()
            .addOption(Option.builder("a").hasArg().hasArgs().build());CommandLine cmd = new DefaultParser().parse(options, args);
LOG.debug(Arrays.asList(args).toString() + " : " + Arrays.asList(cmd.getOptionValues("a")).toString());
DEBUG :: [-a, b] : [b]
DEBUG :: [-a, b, c] : [b, c]

您可能希望在提供太多或太少的參數時引發自己的分析異常。

如果您想多次提供答案,請查看此答案:https://stackoverflow.com/a/64611857/8656281-a


查看完整回答
反對 回復 2022-09-28
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

根據我對 appache-commons-cli 文檔的理解(我可能是錯的),似乎沒有辦法在每個參數的基礎上設置“可選Arg”。

另外,我看到它在示例中使用的方式,它似乎在兩者之間使用分隔符的參數,如in而不是空格?我不確定這一點。-D<property>=<value>

但是,是的,對于你想要的,你可以把它弄臟并允許可選參數,然后在選項沒有必需的參數時拒絕它(違背了我知道使用commons-cli的目的)。

編輯:您是否嘗試過使用模式選項生成器?這個例子引起了我的興趣:

例如,以下內容允許命令行標志為“-v -p 字符串值 -f /dir/文件”。感嘆號位于強制選項之前。

 Options options = PatternOptionBuilder.parsePattern("vp:!f/");

它說感嘆號可以在強制選項之前使用,但我不確定它是否可以與強制參數一起使用?不過我沒有嘗試過。


查看完整回答
反對 回復 2022-09-28
  • 3 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號