Clojure 如何检查符号在当前命名空间中是否可解析?
我想检查符号在当前名称空间中是否可解析。做这件事的标准方法是什么?看看。比如说Clojure 如何检查符号在当前命名空间中是否可解析?,clojure,Clojure,我想检查符号在当前名称空间中是否可解析。做这件事的标准方法是什么?看看。比如说 (ns-map *ns*) 将为您提供当前命名空间中绑定的映射。您可以检查此地图以确定您的符号是否为地图中的键 (defn resolvable? [sym] (contains? (ns-map *ns*) sym)) 我不知道这是否是规范的方法。在再次筛选API文档后,我偶然发现了什么可能是合适的函数: ; Returns the var or Class to which the symbol ; w
(ns-map *ns*)
将为您提供当前命名空间中绑定的映射。您可以检查此地图以确定您的符号是否为地图中的键
(defn resolvable? [sym]
(contains? (ns-map *ns*) sym))
我不知道这是否是规范的方法。在再次筛选API文档后,我偶然发现了什么可能是合适的函数:
; Returns the var or Class to which the symbol
; will be resolved in the current namespace, else nil.
(resolve 'foo)
; see also:
(ns-resolve *a-namespace* 'foo)
如何区分未绑定的符号和绑定到nil的符号之间的区别?只有由符号命名的Var才能绑定到nil。符号本身在当前名称空间中命名一个变量,然后对其进行解析,或者不进行解析(然后resolve返回nil)。
(包含?(ns map*ns*)键)
执行相同的操作,可能更快。