3

デバッグ時に式とその結果を出力するための簡単なマクロを作成しました。

(defmacro dbg-print 
  "Print out values or expressions in context"
  [& rest]
  `(let [symb-str# (map str '~rest)
         symb-evl# (list ~@rest)
         pairs# (map #(str %1 %2 %3 %4) symb-str# (repeat ":") symb-evl# (repeat " "))
         str# (reduce str pairs#)]
     (printf "%s\n" str#)))

それはこのように動作します:

(defn my-func1
  [arg]
  (dbg-print (+ arg 1)))
(my-func1 1)

出力を与える

(+ arg 1):2 

次に、インデックスから何かを読み取るという問題に遭遇しました。

(defn my-func2
  [first & rest]
  (dbg-print rest)
  (nth rest 1))
(my-func2 1 2)

これはまったく出力を与えません。dbg-print マクロの下でエラーが発生し、印刷を停止するにはどうすればよいですか? また、マクロで printf の代わりに println と format を使用すると、エラーがなくなることにも気付きました。しかし、私はまだ何が起こっているのか知りたいです。

4

1 に答える 1