2013-03-04 74 views
3

我正在閱讀Programming Clojure,並在src/examples/gulp.clj中遇到以下代碼。我不能按照什麼是點後的StringBuilder,等的FileInputStream意思 -clojure中的符號後點的含義

(ns examples.gulp 
    (:import (java.io FileInputStream InputStreamReader BufferedReader))) 
(defn gulp [src] 
    (let [sb (StringBuilder.)] 
    (with-open [reader (-> src 
         FileInputStream. 
         InputStreamReader. 
         BufferedReader.)] 
     (loop [c (.read reader)] 
     (if (neg? c) 
      (str sb) 
      (do 
      (.append sb (char c)) 
      (recur (.read reader)))))))) 

任何人都可以請一些啓發。

回答

12

類名後面的點只是調用該類的構造函數的特殊語法。

(macroexpand '(StringBuilder. "foo")) 
;=> (new StringBuilder "foo") 

請仔細閱讀http://clojure.org/java_interop