29 votes

clojure quand macro

J'ai été la navigation sur le clojure source et j'ai été surpris par la façon dont la lorsque la macro est définie:

user=> (source when)
(defmacro when
  "Evaluates test. If logical true, evaluates body in an implicit do."
  {:added "1.0"}
  [test & body]
  (list 'if test (cons 'do body)))
nil
user=>

Je m'attendais à être écrit quelque chose comme ceci à la place:

(defmacro when [test & body] `(if ~test (do ~@body)))

Pourquoi le réel macro écrite dans cet moins de façon habituelle?

62voto

Arthur Ulfeldt Points 45059

de base.clj est construit de haut en bas, en commençant avec juste ce qu'Java offre et de la construction à toutes les exigences de Clojure comme il va. Lors de l' when est définie de la syntaxe citation n'existe pas encore.
L' when macro est définie sur la ligne 456 de base.clj et les exigences de la syntaxe-devis ne sont pas disponibles jusqu'à ce que la ligne de 682. lors de la macro est utilisée pour définir la syntaxe citant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X