2014-07-23 138 views

回答

5

[]到字符串,使整个文件到一个单一的载体形式的起点和终点:

user> (clojure.pprint/pprint 
     (read-string (str "[" (slurp "/home/arthur/hello/project.clj") "]"))) 
[(defproject 
    hello 
    "0.1.0-SNAPSHOT" 
    :description 
    "FIXME: write description" 
    :url 
    "http://example.com/FIXME" 
    :license 
{:name "Eclipse Public License", 
    :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies 
    [[org.clojure/clojure "1.5.1"] [clj-time "0.6.0"]] 
    :source-paths 
    ["dev"])] 
nil 

```

+0

非常酷!我完全忘记了这一点。 – zcaudate

+1

虽然,如果最后一行是注释,那么不是太热。 – amalloy

+2

哦好点!最好在[之前]和[之前] –

10

该功能打开了Clojure的一个流读取并热切读取该流中的所有表单,直到读取抛出异常(如果存在解析错误或者没有更多表单可读取,则会发生这种情况)。

(import '[java.io PushbackReader]) 
(require '[clojure.java.io :as io]) 

(defn read-all 
    [file] 
    (let [rdr (-> file io/file io/reader PushbackReader.)] 
    (loop [forms []] 
     (let [form (try (read rdr) (catch Exception e nil))] 
     (if form 
      (recur (conj forms form)) 
      forms))))) 
相关问题