2013-07-25 5 views
7

を含めることはできません、私はこのようなファイルを書いた:libの名前は私が今のClojureを勉強期間

;; File ./mycode/myvoc.clj 

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

; more code here... 

このファイルは、私はREPLを実行したとき、私はmyvoc.cljで関数を使用したい、./mycode/に常駐します次のようになります。

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

私はその理由を知りません。私のようにmyvoc.cljを変更した場合:

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

それは大丈夫だろうが、私は輸入部品をコメントのためだけに、「この文脈でリーダー」何を報告しません。

誰かがこれを修正できますか?私も同様にrequireを使用しますが、同じ種類のエラーが発生します。あなたの:use節からの引用を削除する必要が

答えて

15

(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)の省略形ですので、あなたの元:use句を使用すると、:useにしようとしていたかのように見える

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

ました接頭辞がquote、最終セグメントがclojure.java.ioの名前空間。後者のドットは、nsの観点からの誤差の直接の原因である。

ちなみに、(:require [clojure.java.io :as io])の方がはるかに一般的ですが、次にio/file,などと言いますと、名前空間全体をプルするよりもそうです。 ns宣言で:use句とは反対に、(あなたの(use 'mycode.myvoc)コールのように)機能をuse使用している場合

は最後に、ただ明確にすること、引用符が必要です。

+0

はい、ありがとう、これは私にとっては大丈夫です。私はuse(:require ...)節に切り替えました。 – user2545464

関連する問題