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.

Reply via email to