Рекомендуемые способы отладки функций Clojure? - PullRequest
7 голосов
/ 25 сентября 2010

Мой текущий метод: если есть функция, которая, как мне известно, содержит ошибку, я копирую ее в REPL и проверяю, соответствует ли результат ожидания.Чтобы настроить его, я должен определить аргументы функции как фиктивный ввод.Не очень много времени, но я знаю, что есть более эффективный способ.

Есть предложения?

Ответы [ 5 ]

4 голосов
/ 26 сентября 2010

Этот макрос помогает?Он превращает let в серию определений, поэтому вы можете оценить подвыражения:

(defmacro def-let
  "like let, but binds the expressions globally."
  [bindings & more]
  (let [let-expr (macroexpand `(let ~bindings))
        names-values (partition 2 (second let-expr))
        defs   (map #(cons 'def %) names-values)]
    (concat (list 'do) defs more)))

Я написал объяснение здесь: http://www.learningclojure.com/2010/09/astonishing-macro-of-narayan-singhal.html

2 голосов
/ 25 сентября 2010

После прочтения этого, мой новый любимый метод - добавить

(swank.core/break)

внутри функции и проверять значения, нажимая 't'.(Я использую swank-clojure)

Источник: http://hugoduncan.org/post/2010/swank_clojure_gets_a_break_with_the_local_environment.xhtml

1 голос
/ 10 апреля 2013

Версия функции def-let, некоторые кредиты идут на здесь .

(defn def-let [aVec]
  (if-not (even? (count aVec))
    aVec
    (let [aKey (atom "")       
          counter (atom 0)]
      (doseq [item aVec]
        (if (even? @counter) 
          (reset! aKey  item)           
          (intern *ns*  (symbol @aKey)  (eval item)))
        ;   (prn  item)       
    (swap! counter inc)))))

Использование: Необходимо заключать в кавычки содержимое, например

(def-let '[a 1 b 2 c (atom 0)])
1 голос
/ 29 сентября 2010

Я написал библиотеку трассировки, которая может показать вам, какое значение возвращает каждый элемент.
http://github.com/hozumi/eyewrap

1 голос
/ 27 сентября 2010

для ошибок, охватывающих несколько функций. Мне нравится макрос Trace для сообщения о вызовах и возвратах каждой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...