Diciamo che ho un X.clojurescript e uno spazio dei nomi X.clojure. Tutto in X.clojurescript è codice Clojurescript, tutto in X.clojure è il codice Clojure. Purtroppo, non posso definire le macro direttamente ClojureScript, devo definirli in Clojure e poi portarli in uno spazio dei nomi ClojureScript utilizzandoCome faccio a gestire il codice Clojurescript richiesto dai macro Clojurescript?
(ns X.clojurescript.abc
(:require-macros [X.clojure.def :as clj]))
Questo va bene. Tuttavia, cosa succede se la macro (definita in X.clojure) avrà bisogno di fare riferimento a qualcosa definito in uno spazio dei nomi Clojurescript (X.clojurescript)? Il problema è che il compilatore Clojure non cerca nel mio spazio dei nomi Clojurescript (una directory separata) quando risolve altri spazi dei nomi.
Ho risolto questo problema creando semplicemente uno spazio dei nomi nel mio codice Clojure che ha lo stesso spazio dei nomi e la definizione necessaria che esiste in Clojurescript, ma questo sembra un po 'stupido. Quindi, per esempio, se ho bisogno di X.clojurescript.abc.y nella mia macro, creerò solo uno spazio dei nomi aggiuntivo sul lato Clojure che defs un dummy y nella mia versione Clojure di X.clojurescript.abc; tipo di stupido.
Come faccio a gestire una macro che deve fare riferimento a qualcosa sul lato Clojurescript?
Crea la tua macro in modo tale da prendere tutte le cose necessarie dal clojurescript come parametro. Se potessi aggiungere del codice, sarà molto più facile rispondere alla tua domanda specifica – Ankur
Non credo di aver capito la tua domanda. La tua macro deve * generare * il codice che verrà quindi valutato in clojurescript. Quindi, se si deve fare riferimento a qualsiasi def di clojurescript, non sarebbe sufficiente generare il simbolo nell'espansione della macro? – KIMA
'si riferisce a qualcosa sul lato Clojurescript 'ne hai bisogno al momento dell'espansione della macro o questo sarà qualcosa che verrà emesso nel codice di uscita? – Ankur