Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 为什么';我的宏没有任何输出吗_Macros_Clojure - Fatal编程技术网

Macros 为什么';我的宏没有任何输出吗

Macros 为什么';我的宏没有任何输出吗,macros,clojure,Macros,Clojure,我编写了一个简单的宏,用于在调试时打印表达式及其结果 (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

我编写了一个简单的宏,用于在调试时打印表达式及其结果

(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宏下面的错误如何停止打印?我还注意到,如果在宏中使用println和format而不是printf,错误就会消失。但我仍然想知道发生了什么。

这不是一个宏观问题,而是一个I/O问题。在刷新stdio之前,您遇到了一个异常

printf
使用
print
,它使用
pr
而不刷新

println
使用
prn
,它使用
pr
,但在
*换行符上刷新*
true
时刷新