在单独的Clojure命名空间中调用函数

时间:2012-04-04 16:43:47

标签: clojure

如何在一个Clojure命名空间中调用一个函数,bene-csv.core来自另一个命名空间bene-cmp.core?我尝试了各种各样的方法:要求和:使用没有成功。

这是bene-csv中的函数:

(defn ret-csv-data
    "Returns a lazy sequence generated by parse-csv.
     Uses open-csv-file which will return a nil, if
     there is an exception in opening fnam.

     parse-csv called on non-nil file, and that
     data is returned."

    [fnam]
    (let [  csv-file (open-csv-file fnam)
            csv-data (if-not (nil? csv-file)
                         (parse-csv csv-file)
                         nil)]
            csv-data))

这是bene-cmp.core的标题:

(ns bene-cmp.core
   .
   .
   .
  (:gen-class)
  (:use [clojure.tools.cli])
  (:require [clojure.string :as cstr])
  (:use bene-csv.core)
  (:use clojure-csv.core)
  .
  .
  .

调用函数 - 当前是存根(bene-cmp.core)

defn fetch-csv-data
    "This function merely loads the two csv file arguments."

    [benetrak-csv-file gic-billing-file]
        (let [benetrak-csv-data ret-csv-data]))

如果我修改了bene-cmp.clj的标题

 (:require [bene-csv.core :as bcsv])

并将调用更改为ret-csv-data

(defn fetch-csv-data
    "This function merely loads the two csv file arguments."

    [benetrak-csv-file gic-billing-file]
        (let [benetrak-csv-data bcsv/ret-csv-data]))

我收到此错误

引起:java.lang.RuntimeException:没有这样的var:bcsv / ret-csv-data

那么,我该如何调用fetch-csv-data? 谢谢。

1 个答案:

答案 0 :(得分:8)

您需要调用该函数,而不仅仅是引用var。

如果您在ns

中有此信息
(:require [bene-csv.core :as bcsv])

然后你需要在命名空间/别名限定的var周围加上括号来调用它:

(let [benetrak-csv-data (bcsv/ret-csv-data arg)]
  ; stuff
  )