Back

istr (clj)

(source)

macro

(istr & strings)
A string formating macro that works LIKE ES6 template literals but using clojure construcs and symbols for interpolation delimiters. It accepts one or more strings; emits a `concat` invocation that concatenates the string data and evaluated expressions contained within that argument. Evaluation is controlled using ~{} and ~() forms. The former is used for simple value replacement using clojure.core/str; the latter can be used to embed the results of arbitrary function invocation into the produced string. Examples: user=> (def v 30.5) user=> (istr "This trial required ~{v}ml of solution.") "This trial required 30.5ml of solution." user=> (istr "There are ~(int v) days in November.") "There are 30 days in November." user=> (def m {:a [1 2 3]}) user=> (istr "The total for your order is $~(->> m :a (apply +)).") "The total for your order is $6." user=> (istr "Just split a long interpolated string up into ~(-> m :a (get 0)), " "~(-> m :a (get 1)), or even ~(-> m :a (get 2)) separate strings " "if you don't want a << expression to end up being e.g. ~(* 4 (int v)) " "columns wide.") "Just split a long interpolated string up into 1, 2, or even 3 separate strings if you don't want a << expression to end up being e.g. 120 columns wide." Note that quotes surrounding string literals within ~() forms must be escaped.

Examples