访问运行时所有内联关键字的列表对于实现编辑器自动完成和其他编辑器集成特性非常有用。
目前,大多数工具都这样做
user=> (let [field (.getDeclaredField clojure.lang.Keyword "table")] (.setAccessible field true) (map keyword (.keySet (.get field nil))))
(:target :clojure.main/message :clojure.spec.alpha/unknown :datafy :clojure.core.specs.alpha/prefix :dir :clojure.core.specs.alpha/binding-form :allow ...)
然而,这种方法依赖于反射来获取私有、静态字段。底层数据可能(尽管可能性很小)在未通知的情况下更改。
是否有可能在 clojure.core 中添加一个函数,以返回运行时所有关键字的列表?可能是 (all-keywords)
(类似于 (all-ns)
)。或者可能是对 clojure.lang.Keyword
的公开静态方法?
有关此模式的更多信息,请参阅 grep.app 的结果。