; Ruby has an awesome feature -- string interpolation. Read about it on the internet. ; On the other hand, Clojure only has cumbersome Java string formatting, which can not be ; used without pain after you've tried Ruby. ; So here's this simple macro that basically allows you to do most things you could do ; with Ruby string interpolation in Clojure. (ns eis.stuff (:require [clojure.string])) (defmacro fmt [^String string] (let [-re #"#\{(.*?)\}" fstr (clojure.string/replace string -re "%s") fargs (map #(read-string (second %)) (re-seq -re string))] `(format ~fstr ~@fargs))) ;; test the macro (def name "Mister") (def surname "Metaphor") (def seq [1 2 3]) (println (fmt "Hello #{name} #{(clojure.string/join \" \" surname)}!")) (println (fmt "Frist element of #{seq} is #{(first seq)}!"))