On 28 April 2015 at 07:39, Atamert Ölçgen <mu...@muhuk.com> wrote: > Perhaps you can write a function that builds a function somewhere and then > outputs a string containing JavaScript code that invokes it. > > (defn js [& body] > (eval `(defn fn-name# [] ~@body)) > (str "function() { your.ns." fn-name# "(); }"))
If the goal is to send this code to a database to be evaluated there, I do not think this would work, as the function is only defined within Clojure. @OP: as you admit that this is a crazy need, here is a crazy solution: use the ClojureScript compiler directly within your Clojure code. I'm not familiar with it at all; after a quick glance at the Himera source code, here is a "proof of concept": -- $ lein try org.clojure/clojurescript "0.0-3211" nREPL server started on port 52299 on host 127.0.0.1 - nrepl://127.0.0.1:52299 REPL-y 0.3.5, nREPL 0.2.6 Clojure 1.6.0 Java HotSpot(TM) 64-Bit Server VM 1.8.0_25-b17 Docs: (doc function-name-here) (find-doc "part-of-name-here") Source: (source function-name-here) Javadoc: (javadoc java-object-or-class-here) Exit: Control+D or (exit) or (quit) Results: Stored in vars *1, *2, *3, an exception in *e user=> (require '[cljs.compiler :as comp]) nil user=> (require '[cljs.analyzer :as ana]) nil user=> (comp/emit-str (ana/analyze {:uses #{'cljs.core}} '(fn [] (js/alert "hello")))) "(function (){\nreturn alert(\"hello\");\n});\n" user=> -- The first argument to analyze is the environment; you'll probably have to dig a little deeper into the ClojureScript compiler to decide what to pass there. This should allow you to create a macro that let you write ClojureScript code directly: {:some-key :some-value, :action (js-macro (fn [] (js/console.log "pretty crappy transaction") (js/console.log "another line")))} -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.