use*_*464 7 lisp clojure read-eval-print-loop
我现在正在学习clojure,我写了这样一个文件:
;; File ./mycode/myvoc.clj
(ns mycode.myvoc
(:use 'clojure.java.io)
(:import (java.io.File)))
; more code here...
Run Code Online (Sandbox Code Playgroud)
这个文件驻留在./mycode/,当我运行REPL时,我想使用该函数myvoc.clj,如下所示:
user=> (use 'mycode.myvoc)
java.lang.Exception: lib names inside prefix lists must not contain periods (myv
oc.clj:1)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么.如果我改为myvoc.clj:
(ns mycode.myvoc)
; (:use 'clojure.java.io)
; (:import (java.io.File)))
Run Code Online (Sandbox Code Playgroud)
它会没问题但只是报告没有"读者在这种情况下",因为我评论了导入部分.
有人可以解决这个问题吗?我也使用require但得到同样的错误.
Mic*_*zyk 16
您需要删除:use子句中的引用:
(ns mycode.myvoc
(:use clojure.java.io) ; note no '
(:import java.io.File)) ; extra parens removed here; they do no harm,
; though
Run Code Online (Sandbox Code Playgroud)
'clojure.java.io是简写(quote clojure.java.io),所以你原来的:use条款是
(:use (quote clojure.java.io))
Run Code Online (Sandbox Code Playgroud)
这看起来好像您正在尝试:use使用前缀quote和最终段的命名空间clojure.java.io.从后者的角度来看,后者中的点是错误的直接原因ns.
顺便说一句,它的更平常(:require [clojure.java.io :as io]),然后说io/file,io/reader等比它在整个命名空间来拉.
最后,为了清楚起见,在使用函数时 use(例如在(use 'mycode.myvoc)调用中),引用是必需的,而不是声明中的:use子句ns.
| 归档时间: |
|
| 查看次数: |
3682 次 |
| 最近记录: |