为什么lein repl找不到功能?

时间:2015-11-18 15:01:05

标签: debugging clojure leiningen

我正在使用

[ics@steamboy util]$ lein version
Leiningen 2.5.1 on Java 1.7.0_91 OpenJDK Server VM

使用Clojure 1.6

lein repl我曾经能够在repl内调用一个函数。

util.core=> (load-file "src/util/core.clj")
#'util.core/-main
util.core=> (bldg-sqft-test)

并在repl

内执行一项功能
(defn ret-val-from-sos
  "Takes a value, a map key, an s-o-s, and returns first match."
  [in-val map-key-1 map-key-2 s-o-s]
  (doseq [x s-o-s]
    (println (str (first x)))))

(defn bldg-sqft-test
  [& args]
  (let [bldg-cols (fetch-csv-data "bldg_sqft_cols.csv")
        bldg-data (fetch-csv-data "Buildingsqft.csv")
        mapped-data (xform-sos-in bldg-data bldg-cols)
        my-bldg-sqft (ret-val-from-sos (str 70782) (keyword "Bill#") (keyword "Fin. Area") mapped-data)]
    my-bldg-sqft))

当我可以检查repl中的变量时,调试更容易。作为一种解决方法,我已经将一个库转换为使用main运行,但它没有repl调试那样有效

我需要在repl中调用函数来进行哪些设置/配置?

1 个答案:

答案 0 :(得分:3)

运行$ lein repl时,JVM实例启动并加载类路径中的所有命名空间,因此不需要(load-file“example.clj”)。

您尝试做的正确顺序是:

$ lein repl
user=>(require 'util.core)
nil
user=>(in-ns 'my-ns.core)
nil
my-ns.core=>(bldg-sqft-test)

$ lein repl
user=>(require '[util.core :refer :all])
nil
user=>(bldg-sqft-test)

如果你以某种方式需要加载外部.clj文件,那么(load-file "external.clj")会将文件添加到类路径中,然后你就可以要求命名空间了。