2012-04-04 13 views
4

Wie rufe ich eine Funktion in einem Clojure-Namespace, bene-csv.core, aus einem anderen Namespace, bene-cmp.core, auf? Ich habe verschiedene Geschmacksrichtungen ausprobiert: require und: nutze ohne Erfolg. HierAufruf der Funktion im separaten Clojure-Namespace

ist die Funktion in 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)) 

Hier ist der Header 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) 
    . 
    . 
    . 

Die Aufruffunktion - zur Zeit ein Stub - in (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])) 

Wenn ich den Header bene-cmp.clj ändern

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

und den Anruf ändern ret-csv-Daten

(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])) 

Ich erhalte diesen Fehler

Verursacht durch: java.lang.RuntimeException: Keine solche var: bcsv/ret-csv- Daten

Also, wie rufe ich fetch-csv-Daten? Danke.

Antwort

6

Sie müssen die Funktion aufrufen, nicht nur die Var beziehen.

Wenn Sie dies in Ihrem ns:

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

Dann müssen Sie Klammern um den Namespace/alias qualifizierte var um es aufzurufen:

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

Dank. Ich habe die Variable referenziert, anstatt die Funktion aufzurufen. Zumindest meine: Verlangensinstinkte waren gut. – octopusgrabbus

Verwandte Themen