鑑於你所描述的,我認爲你有兩個選擇。在這兩個,我會說,轉換成字典將是最簡單的,但轉換成一個元組會工作,只有一點點笨拙
因此,採取這樣的定義:
options :: [OptDescr (String, String)]
options = [Option ['a'] ["alpha"] (ReqArg (\a -> ("alpha", a)) "empty") "",
Option ['b'] ["beta"] (ReqArg (\a -> ("beta", a)) "empty") "",
Option ['g'] ["gamma"] (ReqArg (\a -> ("gamma", a)) "empty") ""]
main = do
args <- getArgs
let (opts, nonopts, errs) = getOpt Permute options args
putStrLn $ show opts
由此看來,一個我的示例輸出的幾個是:
[("beta","b"),("alpha","a")]
[("alpha","a"),("gamma","g"),("beta","b")]
等等。與命令行上的順序相同。但是,由於我在上面設置的方式,我基本上有一個關聯列表,所以...如果我特別想要一個具有值(alpha,beta,gamma)的Tuple,那麼我最好的選擇是......
(lookup "alpha" opts, lookup "beta" opts, lookup "gamma" opts)
您得到的數據類型將是(也許字符串,字符串也許,也許字串),在「阿爾法」,「beta」和「伽馬」的順序。
您是否考慮過使用hackage上的衆多命令行解析包之一? – 2012-07-07 07:34:13
@NathanHowell我正在使用GetOpt和Permute訂購 – jdevelop 2012-07-07 07:35:02
像'cmdargs'和'optparse-applicative'這樣的軟件包會填充記錄字段。忽略命令行中參數的順序。您可以嘗試其中一種或兩種方法作爲GetOpt的替代方案。 – 2012-07-07 07:43:03