我是一个Clojure新手。
我的cli app的选项// Convert nested arrays to a simple array
$array = array();
array_walk_recursive($input, function ($a) use (&$array) {
$array[] = $a;
});
sort($array);
$hash = md5(json_encode($array));
----
These arrays have the same hash:
$arr1 = array(0 => array(1, 2, 3), 1, 2);
$arr2 = array(0 => array(1, 3, 2), 1, 2);
需要多个参数,例如:
-a
第一个是数字,其他两个必须是字符串。
我的代码是:
java -jar app.jar -a 12 abc xyz
但是我发现传递给["-a" "--add LINE TYPE ENTRY" "Add entry to specified line number of the menu"
:parse-fn #(split % #" ")
:validate [#(number? (Integer/parseInt (first %))) "ERROR: Invalid position"]
函数的%
是一个只包含第一个参数的向量,即:parse-fn
其他参数列为[12]
:arguments
的值
现在,
(1)有没有办法验证那些未经处理的参数?
(2)如何检索和使用这些参数?
答案 0 :(得分:1)
我认为你不能一次解析一个选项的空格分隔值。
通常你会这样做:-a opt1 -a opt2 -a opt3
,但由于你有opt1
的不同类型,这将无效。
用逗号分隔它们怎么样?
(require '[clojure.tools.cli :refer [parse-opts]])
(def cli-opts
[["-a" "--add LINE TYPE ENTRY" "Add entry to specified line number of the menu"
:parse-fn (fn [a-args]
(-> a-args
(str/split #",")
(update 0 #(Integer/parseInt %))))
:validate [(fn [[num s1 s2]]
(and (number? num)
(string? s1)
(string? s2)))]]])
(parse-opts ["-a" "12,abc,xyz"] cli-opts)
;;=> {:options {:add [12 "abc" "xyz"]}, :arguments [], :summary " -a, --add LINE TYPE ENTRY Add entry to specified line number of the menu", :errors nil}
另一种选择是为a
引入两个或三个不同的选项:--line
,--type
和--entry
。