簡體   English   中英

clojure core.tools.cli:如何覆蓋布爾選項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM