[英]clojure core.tools.cli: How to override boolean option?
我想要一個帶有以下參數的命令:
--enable-boolean-flag --disable-boolean-flag --enable-boolean-flag
在clojure.tools.cli/parse-opts
返回的:options
鍵中,如果--enable-boolean-flag
選項在命令行中排在最后,我希望將:boolean-flag
選項設置為true,如果--disable-boolean-flag
在命令行中排在最后,如果有意義的話。
有任何想法嗎?
編輯:我正在使用core.tools.cli
庫的0.3.6。
您可以利用tools-cli可以為每個命令行選項指定的:id
, :default
和:assoc-fn
屬性來實現此目的。
:id
為“ --enable”和“ --disable”選項設置相同的ID :default
可以指定如果未指定“ --enable”或“ --disable”時要發生的情況 :assoc-fn
指定選項對選項圖的影響。 你想要的值設置為false
,每次“ -禁用”出現,並true
每次--enable
出現。 放在一起:
(ns clis.core
(:require [clojure.tools.cli :refer [parse-opts]])
(:gen-class))
(def cli-options
[["-e" "--enable" "Enable"
:default true
:id :boolean-flag
:assoc-fn (fn [m k _] (assoc m k true))]
["-d" "--disable" "Disable"
:id :boolean-flag
:assoc-fn (fn [m k _] (assoc m k false))]])
(defn -main [& args]
(parse-opts args cli-options))
在REPL上進行測試:
(-main)
;; {:options {:boolean-flag true}, :arguments [], :summary " -e, --enable Enable\n -d, --disable Disable", :errors nil}
(-main "-e" "-d" "-e")
;; {:options {:boolean-flag true}, :arguments [], :summary " -e, --enable Enable\n -d, --disable Disable", :errors nil}
(-main "-e" "-d" "-e" "-d")
;; {:options {:boolean-flag false}, :arguments [], :summary " -e, --enable Enable\n -d, --disable Disable", :errors nil}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.