4

Programming Clojure を読んでいて、src/examples/gulp.clj で次のコードに出くわしました。StringBuilder、FileInputStreamなどの後のドットの意味を理解できません-

(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))))))))

誰でも光を当ててください。

4

1 に答える 1

13

クラス名の後のドットは、クラスのコンストラクターを呼び出すための特別な構文です。

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

http://clojure.org/java_interopを読んでください。

于 2013-03-04T12:18:41.913 に答える