2
我有一個函數可以處理函數的元數據。我知道,我可以得到一個功能的元數據的語法如下:如何從變量中獲取函數的元數據
(meta #'println)
它返回與元數據我感興趣的是:
{:arglists ([& more]), :doc "Same as print followed by (newline)", :added "1.0", :static true, :line 3631, :column 1, :file "clojure/core.clj", :name println, :ns #namespace[clojure.core]}
但它不工作,如果是內部的變量。我嘗試以下
(defn x [f] (meta #'f))
當然它引發以下錯誤:
clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve var: f in this context, compiling:(/var/folders/zs/_8vy14592dncxyj8mcz4jfyc000_9z/T/boot.user1460390749042099586.clj:1:1)
java.lang.RuntimeException: Unable to resolve var: f in this context
不工作,如果我只是使用元:
(defn x [f] (meta f))
(x println)
因爲它以nil
返回不與原始元數據的println
函數。
同樣的,當我嘗試用反引號:
(defn x [f] (meta `f))
那麼,有沒有一種方法來獲取我引用的'println'的原始元數據? –
它取決於你的函數如何被調用。我會將其廣告給答案 –
它被稱爲像我在問題中寫的:'(x println)' –