Clojure - 需要在repl中声明的命名空间

时间:2012-11-25 00:45:15

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

假设我想在REPL中执行以下操作:

(ns a1)

(defn adder [a b]
  (+ a b))

(ns b1
  (:require [a1 :as a]))

(println (a/adder 1 2))

如果根据声明的命名空间在文件中定义代码,则此方法可以正常工作。但是,如果我们在repl中这样做 - 那么我们在这一行得到一个错误:

(ns b1
  (require [a1 :as a]))

错误是:

FileNotFoundException Could not locate a1__init.class or a1.clj on classpath:   
clojure.lang.RT.load (RT.java:432)

现在我知道我可以明确地将命名空间的全名放在:

(println (a1/adder 1 2))

但我想缩写我的命名空间。 (如果我的命名空间是20个字符长或更长)。

我应该更改什么以确保我能够以缩写方式引用repl上的不同命名空间?

1 个答案:

答案 0 :(得分:3)

require在内部使用函数alias来执行您想要的操作:

(ns b1)
(alias 'a 'a1)