如何使用函数吐写函数的结果?

时间:2019-04-17 08:07:32

标签: clojure

我有此代码:

(defn a[]
  1
  )

(defn test []
  (spit "test.txt" a))

运行test时,test.txt仅具有对象名称:

test$a@603494de

但我希望它的值为1

或者如果我使用with-open:

(defn test1 []
  (with-open [w (clojure.java.io/writer "test.txt")]
    (.write w a)))

得到错误:IllegalArgumentException找不到匹配的方法:为类java.io.BufferedWriter编写

但是如果我写:

(.write w "a")

没有错误

如何解决?谢谢!

1 个答案:

答案 0 :(得分:2)

正在发生两件事:

首先,a是一个函数。您需要调用它并获取值,或者改用def(因为其常量):

(def a 1) ;; no need to call a
(defn a[] 1) ;; need to call a: (a)

第二,(假设您保留defn并且a仍然是一个函数),要创建一个字符串作为spit的参数,您需要使用str:< / p>

(spit "test.txt" (str (a))) ;; note a is called