Is it possible to change the bindings bindings?

I want to learn how to change the value of a variable declared in a binding of a Clojure function binding. Below is the code I'm using. I want the function to return a java.lang.String object that contains the text contained in the string.

(defn read-text-from-file
  {:doc "fn read-text-from-file is used to output in \"string\"
format the text in a file."}
  [#^String file-name]
  (let [buff-reader (open-file-reader file-name)]
  (loop [full-text "" line (.readLine buff-reader)]
    (when line
      (-> full-text (.concat line))
;      (println full-text)
      (recur (-> file-name (.concat line)) (.readLine buff-reader))))))

Note . The open-file-reader function is below:

(defn open-file-reader
  {:doc "This is used to open a file, ready for reading"}
  [file-name]
  (let [file-object (java.io.File. file-name)
        buff-reader (-> file-object (java.io.FileReader.)
                        (java.io.BufferedReader.))]
    buff-reader))
+3
source share
3 answers

let . , . , if when. if full-text, line null recur, .


, slurp, .

user=> (doc slurp)
-------------------------
clojure.core/slurp
([f & opts])
  Opens a reader on f and reads all its contents, returning a string.
  See clojure.java.io/reader for a complete list of supported arguments.
nil

, full-text StringBuilder. String, (str full-text), . Clojure .

+8

, , , .

+4

let. . , , slurp, , , , , -seq , :

(defn fetch-file-text [file-name]
     (with-open [rdr (clojure.java.io/reader file-name)]
          (apply str (line-seq rdr)))) 

line-seq : http://clojuredocs.org/clojure_core/clojure.core/line-seq

: http://clojuredocs.org/clojure_core/clojure.core/apply

+3

All Articles