在 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))
我是 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))