2016-05-26 6 views

Antwort

10

Es stellt sich heraus, dass Sie das Lesemakro # 'oder var verwenden können, um auf die zu testende private Funktion zu verweisen. Wenn die private Funktion im Namensraum ab und hat den Namen c:

(ns a.b-test 
    (:use 
    [clojure test])) 

(deftest a-private-function-test 
    (testing "a private function" 
    (let [fun #'a.b/c] 
     (is (not (fun nil)))))) 
+2

Mit der Syntax '#' ab/d' ist eine Abkürzung für '(var ab/d)', mit Rückkehr des "var" der zeigt auf die "Funktion" 'ab/d'. Wenn Clojure die Variable sieht, ersetzt sie automatisch die Funktion vor der Auswertung. Ich fand dieses (meist undokumentierte) Verhalten für einige Jahre ziemlich verwirrend. –

+0

@AlanThompson Huh, sieht aus wie 'clojure.lang.Var' implementiert' IFn'. Das wusste ich nicht. Ich nehme an, es macht eine gewisse Menge Sinn .... –

+0

Art von traurig, privat wurde in clojure wie das geflickt – matanster

Verwandte Themen