Sto cercando di ottenere i metadati di tutte le funzioni Clojure incorporate.Clojure: come ottenere i meta-dati delle funzioni?
In previous question Ho imparato che questo può essere ottenuto utilizzando qualcosa come ^#'func_name
(ottenere i meta dati dell'oggetto var). Ma non sono riuscito a farlo a livello di codice, dove func-name non è noto in anticipo.
Per esempio cercando di ottenere i metadati dell'ultima funzione in clojure.core:
user=> (use 'clojure.contrib.ns-utils)
nil
user=> (def last-func (last (vars clojure.core)))
user=> last-func
zipmap
;The real metadata (zipmap is hardcoded)
user=> ^#'zipmap
{:ns #<Namespace clojure.core>, :name zipmap, :file "clojure/core.clj", :line 1661, :arglists ([keys vals]), :doc "Returns a map .."}
;Try to get programmatically, but get shit
user=> ^#'last-func
{:ns #<Namespace user>, :name last-func, :file "NO_SOURCE_PATH", :line 282}
Come si può fare? Ho già provato numerose varianti, ma niente ha il trucco.
Grazie! Infatti,^(ns-resolve 'clojure.core last-func) raggiunge questo – GabiMe
Ho trovato un altro modo per farlo usando la funzione "intern":^(intern' clojure.core last-func) – GabiMe
Questa è una soluzione pericolosa:
Quindi fai attenzione a dove viene il tuo simbolo. Consiglierei comunque ns-resolve su intern. – kotarak