System.out.format接受可变参数. Java调度var args函数的方式是将其余的参数推到Object数组中.可以像这样在clojure中实现:
(. System/out format "abc" (into-array []))
(. System/out format "abc %d" (into-array [12]))
;; or use the more intuitive
(.format System/out "abc %d" (into-array[12]))
实际上,您的很多尝试都非常接近:
(def x (. System out))
(. x format "foo" (into-array[]))
(. x (format "foo" (into-array[])))
(.format x "foo" (into-array[]))
(. x format "%s" (into-array["foo"]))
但是,请注意,这将打印到repl控制台,而不一定是您的IDE所显示的内容.
为了像clojure那样显示它,而不是使用java的System.out对象,请使用clojure的* out *:
(. *out* format "abc %d" (into-array [12]))
;; "abc 12"
编辑
看来您的* out *被定义为OutputStreamWriter,它没有方法格式.不知道为什么,但是您可以使用绑定来克服这个问题,例如:
user=> (binding [*out* System/out]
(. *out* format "abc %d" (into-array[12])))
abc 12#object[java.io.PrintStream 0x4efb0c88 "java.io.PrintStream@4efb0c88"]