簡體   English   中英

為什么lein repl找不到功能?

[英]Why can't lein repl find function?

我正在使用

[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中調用函數?

運行$ 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")會將文件添加到類路徑中,然后您可以像上面那樣需要命名空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM