clojure - 如何在 Clojure 中使用命令行参数?
问题描述
我正在完成我的第一个 Clojure 程序之一。我剩下要做的一件事是让我的程序接受命令行参数。args 的数量可以变化(但至少需要一个),然后每个命令行 arg 需要作为参数提供给 my 中的函数main
,一次一个。我一直在网上阅读,似乎这clojure/tools.cli
是这样做的方法,(使用parse-opts
可能?)。但我无法为我的一生弄清楚。没有验证,这确实需要发生——用户提供的任何内容都是有效的。(唯一需要检查的是至少提供了一个参数)。关于如何解决这个问题的任何建议?
我遇到的所有例子看起来都非常复杂,很容易让我头疼。
我正在尝试做的一个简单示例是在用户提供任意数量的命令行参数之后,然后让 clojure 在终端的新行中打印每个字符串。
我使用 leiningen 来运行我的程序。
解决方案
由于您的整个问题似乎可以归结为:
我正在尝试做的一个简单示例是在用户提供任意数量的命令行参数之后,然后让 clojure 在终端的新行中打印每个字符串。
我会回答的。这可以相当简洁地完成:
(defn -main [& args] ; & creates a list of var-args
(if (seq args)
; Foreach arg, print the arg...
(doseq [arg args]
(println arg))
; Handle failure however here
(throw (Exception. "Must have at least one argument!"))))
请注意,除非您绝对希望在传递 0 个参数时彻底失败,否则您可以跳过seq
检查。doseq
如果为空则不会运行,args
因为没有任何东西可以迭代。
您还可以将整个替换为doseq
:
(mapv println args)
但这可以说是对mapv
.
推荐阅读
- javascript - 无法访问 for 循环中使用的链式 Promise 内的外部范围变量
- python - ListBuckets 操作:拒绝访问 - aws mfa 令牌
- typescript - 工作表 API (google apis) 返回错误“'无效授权:找不到帐户'
- python - 如何将 sql 查询转换为 Pandas Dataframe 和 PySpark Dataframe
- css - css网格两侧不寻常的空白
- inventory - Odoo 13:在过去的日期发布库存估价
- entity-framework-core - Azure 数据库在 localhost 上工作,但在与 azure 服务应用程序一起使用时不能
- python - 在 Python 中修改 txt 文件行的最佳方法是什么
- vim - VIM 中的 grep 在 vim 中显示结果之前打开带有结果的终端
- r - 使用 group_by 维护时间序列的顺序