Sintaxis: ¿Cuándo incluir apóstrofe en clojure?

Cuál es la diferencia entre:

(require '[some-package.sub as some])
(require 'example.core)

y

(require [some-package.sub as some])
(require example.core)

¿Cuándo debo usar uno sobre el otro? Solo el que tiene apóstrofe funciona en un entorno REPL.

Mejor respuesta
require es una función (verifique con (requiere la fuente) en un REPL). Así se evalúa sus parámetros antes de su propia evaluación.

En el momento en que llama, el símbolo some-package.sub se resuelve (apunta) a nada, por lo que obtiene un “No se puede resolver el símbolo: el-símbolo-que-apunta a nada en este contexto …”

Sin embargo, si usted cita dicho símbolo, podemos llegar a la evaluación real de require. Por lo tanto requieren, ya que es una función, requiere formas entre comillas.

Ahora ns es una macro (verifique con (source ns) en un REPL). Por lo tanto, no evalúa sus parámetros antes de la expansión. Técnicamente, podía tomar símbolos libres o formas citadas, pero se decidió usar símbolos libres en bruto. (ns lalala (: require [some-package.sub: as some]))

No-o-o-o-ow, cuando llama a require (function) con a, en realidad requerirá el símbolo que se encuentra en la var que se resuelve.

Ejemplo:

(def a 'B)
(require a)
FileNotFoundException Could not locate B__init.c;ass or B.clj on the classpath[...]

… eso es porque requerir es una función.

Espero que haya ayudado.

Por favor indique la dirección original:Sintaxis: ¿Cuándo incluir apóstrofe en clojure? - Código de registro