2013-07-25 10 views
7

Şimdi Clojure öğreniyorum dönemleri içermemelidir, böyle bir dosya yazdı Bunun gibi:lib isimler

user=> (use 'mycode.myvoc) 
java.lang.Exception: lib names inside prefix lists must not contain periods (myv 
oc.clj:1) 

Neden bilmiyorum. Ben myvoc.clj değiştirirseniz:

(ns mycode.myvoc) 
; (:use 'clojure.java.io) 
; (:import (java.io.File))) 

Tamam olacak ama ithalat bölümünü yorumladı için sadece "bu bağlamda okuyucu" hayır bildirmektedir.

Birisi bunu düzeltebilir mi? Ben require kullanın ama aynı tür bir hata olsun.

cevap

15

Sen :use maddesi dan alıntı kaldırmak gerekir:

(ns mycode.myvoc 
    (:use clojure.java.io) ; note no ' 
    (:import java.io.File)) ; extra parens removed here; they do no harm, 
          ; though 

'clojure.java.io(quote clojure.java.io) için steno orijinal :use fıkra sen :use çalışıyormuş gibi bu görünüyor

(:use (quote clojure.java.io)) 

oldu, olduğu quote öneki ve son bölüm clojure.java.io ile bir ad alanı. İkincisindeki noktalar, hatanın ns bakış açısından doğrudan sebebidir.

Tesadüfen, (:require [clojure.java.io :as io]) için çok daha normaldir ve daha sonra io/file, io/reader vb. Tüm ad alanını çekmekten daha iyidir. fonksiyonunu (sizin (use 'mycode.myvoc) çağrısında gibi)use kullanırken ns bildiriminde bir :use maddesi aksine

Son olarak, açık konuşmak gerekirse, alıntı gereklidir.

+0

evet, teşekkürler, bu benim için sorun değil. Kullanıma (: gerektirir ...) yan tümceleme. – user2545464