[#15] Add println
This commit is contained in:
parent
4cb8e16daf
commit
595d4d3ead
5 changed files with 79 additions and 8 deletions
4
src/scittle/impl/common.cljs
Normal file
4
src/scittle/impl/common.cljs
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(ns scittle.impl.common
|
||||
(:require [sci.core :as sci]))
|
||||
|
||||
(def cljns (sci/create-ns 'clojure.core nil))
|
||||
35
src/scittle/impl/io.cljs
Normal file
35
src/scittle/impl/io.cljs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
(ns scittle.impl.io
|
||||
(:refer-clojure :exclude [prn print println with-out-str])
|
||||
(:require
|
||||
[cljs.core :as c]
|
||||
[goog.string]
|
||||
[sci.core :as sci]
|
||||
[scittle.impl.common :refer [cljns]]))
|
||||
|
||||
(def print-fn (sci/copy-var *print-fn* cljns))
|
||||
(def print-newline (sci/copy-var *print-newline* cljns))
|
||||
|
||||
(defn println [& objs]
|
||||
(binding [*print-fn* @print-fn
|
||||
*print-newline* @print-newline]
|
||||
(apply c/println objs)))
|
||||
|
||||
(defn prn [& objs]
|
||||
(binding [*print-fn* @print-fn
|
||||
*print-newline* @print-newline]
|
||||
(apply c/prn objs)))
|
||||
|
||||
(defn print [& objs]
|
||||
(binding [*print-fn* @print-fn]
|
||||
(apply c/print objs)))
|
||||
|
||||
(defn ^:macro with-out-str
|
||||
"Evaluates exprs in a context in which *print-fn* is bound to .append
|
||||
on a fresh StringBuffer. Returns the string created by any nested
|
||||
printing calls."
|
||||
[_ _ & body]
|
||||
`(let [sb# (goog.string/StringBuffer.)]
|
||||
(binding [cljs.core/*print-newline* true
|
||||
cljs.core/*print-fn* (fn [x#] (.append sb# x#))]
|
||||
~@body)
|
||||
(cljs.core/str sb#)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue