2016-05-26 21 views

risposta

10

Si scopre che è possibile utilizzare la macro # del lettore o var per fare riferimento alla funzione privata da testare. Se la funzione privata è nel namespace AB e ha il nome 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

Utilizzando la sintassi '# 'ab/d' è una scorciatoia per' (var ab/d) ', con ritorni il "var", che punta alla "funzione" 'ab/d'. Quando Clojure vede la var, sostituisce automaticamente la funzione prima della valutazione. Ho trovato questo comportamento (per lo più non documentato) abbastanza confuso per diversi anni. –

+0

@AlanThompson Huh, sembra 'clojure.lang.Var' implements' IFn'. Non lo sapevo. Suppongo che abbia un certo senso ... –

+0

un po 'triste, privato è stato rattoppato in clojure come quello – matanster

Problemi correlati