You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Clojure tools.cli如何校验仅传入可接受的命令行选项

Clojure tools.cli 校验未知选项的原生实现方式

tools.cli 从0.4.0版本开始就内置了严格选项校验能力,不需要编写自定义遍历校验逻辑,直接通过配置即可实现未定义选项拦截:

  • 核心配置
    调用parse-opts解析命令行参数时,传入:strict true配置项即可开启严格模式。开启后所有未在预定义选项列表中声明的横杠开头参数(比如你提到的-d),都会被自动识别为非法参数,对应的错误信息会被收集到返回结果的:errors字段中。

  • 完整实现示例

;; 引入依赖
(require '[clojure.tools.cli :refer [parse-opts]])

;; 预先定义所有合法选项
(def allowed-cli-options
  [["-a" "开启功能A"]
   ["-b" "开启功能B"]
   ["-c" "配置C项取值" :default "val-c"]
   ["-h" "--help" "输出帮助说明"]])

(defn -main [& input-args]
  (let [parse-result (parse-opts input-args allowed-cli-options :strict true)
        {:keys [options arguments errors summary]} parse-result]
    ;; 拦截所有解析错误,包含未知选项错误
    (when errors
      (binding [*out* *err*]
        (println "命令行参数不合法:")
        (run! println errors)
        (println "\n可用选项列表:")
        (println summary))
      (System/exit 1))
    
    ;; 错误拦截通过后,执行正常业务逻辑
    (println "参数解析完成,合法配置:" options)
    (println "传入的位置参数:" arguments)))
  • 效果说明
    如果用户传入未定义的-d参数,程序会自动输出如下错误信息后退出:
命令行参数不合法:
Unknown option: "-d"

可用选项列表:
  -a  开启功能A
  -b  开启功能B
  -c  配置C项取值
  -h, --help  输出帮助说明
  • 注意事项
    • 严格模式不会将不带选项前缀的位置参数判定为非法,这类参数会正常存入返回结果的:arguments字段,不会触发错误。
    • 如果你使用的是0.4.0之前的旧版本tools.cli,没有内置:strict配置,需要先升级版本才能使用该原生能力。

内容的提问来源于stack exchange,提问作者Joshua Fox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:45:44