【问题标题】:lib names inside prefix lists must not contain periods前缀列表中的库名称不得包含句点
【发布时间】:2013-07-25 02:58:59
【问题描述】:

我现在正在学习clojure,我写了一个这样的文件:

;; File ./mycode/myvoc.clj

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

; more code here...

这个文件位于./mycode/,当我运行REPL时,我想使用myvoc.clj中的函数,像这样:

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,但得到了同样的错误。

【问题讨论】:

    标签: clojure lisp read-eval-print-loop


    【解决方案1】:

    您需要从:use 子句中删除引号:

    (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 (quote clojure.java.io))
    

    这看起来好像您正在尝试:use 一个前缀为quote 和最后一个段clojure.java.io 的命名空间。从ns的角度来看,后者中的点是错误的直接原因。

    顺便说一句,(:require [clojure.java.io :as io]) 然后说io/fileio/reader 等比拉入整个命名空间更常见。

    最后,为了清楚起见,使用 函数 use(如在您的 (use 'mycode.myvoc) 调用中)时引用是必需的,而不是 @987654337 中的 :use 子句@声明。

    【讨论】:

    • 是的,谢谢,这对我来说没问题。我切换到使用 (:require ...) 子句。
    猜你喜欢
    • 2023-02-22
    • 2020-06-24
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多