在 Clojure 中,读取在命令提示符下指定的文件

In Clojure, reading a file which is specified at the command prompt

我是 Clojure 的新手,我正在尝试读取一个应该在命令行指定的文件。

当我尝试以下操作时,在 REPL 中给出文件名,它正在工作

(ns testpj.core
   (:require [clojure.java.io :as io]))

  (defn readfile [filename]
  (println (System/getProperty "user.dir"))
  (println "Arguments: " filename)
  (slurp filename))

然后我 运行 在 REPL 中执行此操作并获取文件的内容

(require '[testpj.core :as h]) 
  (h/readfile file1.txt)

但是当我将上面的代码更改为 main 并尝试在 命令行

lein run file1.txt



(defn -main [& args]
(println (System/getProperty "user.dir"))
(println "Arguments: " args)
(slurp args))

,我收到以下错误:

"java.lang.IllegalArgumentException: Cannot open <("file1.txt")> 作为输入流。"

有人可以帮忙吗?谢谢

-main 的参数向量是 [& args],这意味着 -main 接受任意数量的参数。在函数内部,var args 将绑定到传递给它的参数列表,或者 nil 如果没有给函数提供参数。因此,为了 slurp 第一个 参数传递给一个接受多个参数的函数:

(slurp (first args))