如何在clojure中获取函数参数的相应var



考虑以下clojure repl命令:

user=> (defn foobar [x] (println x))
#'user/foobar
user=> (defn somefun [] )
#'user/somefun
user=> (foobar somefun)
#object[user$somefun 0x4efeab94 user$somefun@4efeab94]
nil
user=> (foobar (var somefun))
#'user/somefun
nil

问题:如何实现foobar打印其参数的var

这不起作用:

(defn foobar [x] (println (var x)))

结果:

CompilerException java.lang.RuntimeException: Unable to resolve var: x in this context, compiling:(/tmp/form-init882462612882384638.clj:1:27) 

它不适用于(defn foobar [x] (println #'x))(相同结果(。

如何实现该 foobar打印其参数的 var

我不确定使用defn功能是否可以。一旦您进入foobar的主体,x是函数值(不是符号(,var期望符号参数。您可以在调用该功能之前解决var ,也可以使用宏,使您可以使用该函数的符号:

(defmacro print-var [x]
  `(println (var ~x)))
(print-var somefun)
;; #'user/somefun

最新更新