2010-09-15 9 views
11

Cuando requiero bibliotecas de los ns forman consigo:¿Por que requiere en los ns forman comportan diferente de la función requerir

test> (ns test (:require '(clojure.contrib [logging :as log] [sql :as sql]))) 
lib names inside prefix lists must not contain periods 
[Thrown class java.lang.Exception] 

Cuando utilizo la función requerir funciona como se esperaba.

test> (require '(clojure.contrib [logging :as log] [sql :as sql])) 
nil 

La documentación para ns se refiere a la documentación de la función requiere, pero ya que se comportan de manera diferente esto es un poco confuso.

Respuesta

16

El formulario ns es una macro, por lo que no es necesario que utilice 'para citar la secuencia proporcionada.

Un ejemplo de los documentos Clojure:

(ns foo.bar 
    (:refer-clojure :exclude [ancestors printf]) 
    (:require (clojure.contrib sql sql.tests)) 
    (:use (my.lib this that)) 
    (:import (java.util Date Timer Random) 
     (java.sql Connection Statement))) 
+1

Ay, mordido de nuevo por esta 'característica' ... Gracias! –

+1

Sí, no es muy consistente. La pauta general, sin embargo, es que es mucho mejor usar ns en lugar de importar, requerir, etc. directamente. Probablemente deberías pensar en las formas individuales como primitivas de bajo nivel y usar ns exclusivamente. – levand

+5

Lo que me sorprende es que las macros no son compatibles con la forma citada de coherencia. Tengo que profundizar en esta noche para descubrir por qué es esto. –

Cuestiones relacionadas