Hier sind zwei Makros IWie evaluiert clojure den Code zum Zeitpunkt der Kompilierung?
(defmacro hello [x] '(+ 1 2))
&
(defmacro hello [x] (eval '(+ 1 2)))
Auf macroexpanding die erste geschrieben hatte, bekomme ich (+ 1 2)
, und während die zweite macroexpanding, erhalte ich den Wert 3. Bedeutet dies, dass der Zusatz zur Kompilierzeit passiert ist? Wie ist das überhaupt möglich? Was passiert, wenn ich anstelle von '(+ 1 2)
eine Funktion geschrieben habe, die eine db abfragt. Würde es die Datenbank zur Kompilierungszeit abfragen?
jetzt sehe ich die Macht: D –