2010-08-19 10 views
7

defino espacio de nombres dentro de un lib clojure sin '¿Por qué el extraño uso de ns/use con Clojure?

(ns myproject.hello) 

Pero, yo uso' para usarlo.

(use 'myproject.hello) 

¿Por qué es esto? ¿Hay alguna lógica detrás de esto? En gosh (dialecto de esquema), uso sin 'i.e. (use myproject) ¿Por qué esta irregularidad?

Respuesta

15

Respuesta corta: ns es una macro, por lo que sus argumentos no se evalúan. use es una función, por lo que sus argumentos deben citarse para evitar que el compilador los evalúe.

Las funciones de uso/requerimiento no formaban parte del diseño original de Clojure, sino que fueron agregadas por los colaboradores. Ellos necesitan una revisión.

3

La forma idiomática es:

(ns myproject.hello

(: uso myproject.world))

+0

Podría explicar por qué esto es idiomático, y cuál es la diferencia entre 'use' y poniendo ': use' dentro de' ns'? –

+0

Tienen prácticamente el mismo efecto. Sin embargo, es más fácil para ambos lectores de código y herramientas automatizadas mirar la declaración ns para determinar qué se está incluyendo, por lo que tiene sentido que sea el enfoque idiomático. – mikera

Cuestiones relacionadas