2014-09-25 23 views
-3

我該如何去實現一個CLI應用程序,該應用程序使用具有不同選項的子命令? (CLI會是這樣的:phial [全局選項]命令[命令選項] [參數...])如何在Rust中製作類似Git的命令行應用程序?

因爲它目前代表我不想使用3 rd黨的圖書館做的工作對我來說,因爲我想要一些第一手的經驗。不幸的是,我不知道我會在哪裏開始討論這個問題。任何幫助將非常感激。

+0

看看貨。我認爲這確實是你正在尋找的。 – Christoph 2014-09-25 10:38:17

+0

我有,但它使用了Docopt,這不是我想要的。 – Shrike 2014-09-25 10:48:27

+0

Docopt只是一個命令行參數解析庫。你沒有使用它來實現子命令。例如,下面是一個使用Docopt的子命令的進行中工作命令:https://github.com/BurntSushi/xcsv/blob/master/src/main.rs#L85-L96(所以有兩個* Docopt調用。一個獲得子命令,另一個獲取子命令的特定參數。) – BurntSushi5 2014-09-25 13:47:09

回答

2

您是否擁有其他語言(如Java或Python)的編程經驗?你有沒有關於如何實現「Git-like子命令」的想法?如果您不這樣做,請不要嘗試實現學習新編程語言和學習如何一次設計CLI程序的兩個目標。

我的一般策略是:

  1. 使用標準getopt樣庫從其他參數
    • 如分體「全局選項」。出phial --verbose=1 init --foo=FOO --bar=BAR baz,我們得到一個字典{ "verbose": "1" }和序列[ "init", "--foo=FOO", "--bar=BAR", "baz" ]
  2. 看看patameters的其餘部分的第一要素認識到「命令」是init
  3. 確定哪些「選項」 init應該接受
    • 假設init應該接受--foo=...--bar=...
  4. 運行getopt再一次針對其餘參數
    • 例如。出[ "--foo=FOO", "--bar=BAR", "baz" ],你會得到一本字典{ "foo": "FOO", "bar": "BAR" }和序列[ "baz" ]
相關問題