gpt4 book ai didi

Clojure 函数从命名空间中的函数获取文档字符串

转载 作者:行者123 更新时间:2023-12-04 17:50:46 25 4
gpt4 key购买 nike

我想编写一个函数来返回我的命名空间中公共(public)函数的名称和文档字符串,如下所示:

(ns familiar.core
(:require [clojure.repl :refer [doc]]
...))

;; various functions with docstrings here

(defn help
"Halp!"
[]
(let [fns (keys (ns-publics 'familiar.core))]
(for [f fns]
[f (with-out-str (doc f))])))

当我调用 (help)在 REPL 中,文档字符串不附带以下功能:
familiar.core=> (help)
([save-experiment ""] [load-experiment ""] [add-data ""] [help ""] ... )

但是调用 (with-out-str (doc add-data))在 REPL 中按我的预期工作:
familiar.core=> (with-out-str (doc add-data))
"-------------------------\nfamiliar.core/add-data\n([& coll])\n
Adds instances of variables with values at active date.\n Examp
le:\n (add-data \"mice\" 6 \"cats\" 2 \"dogs\" 0)\n"

这里发生了什么?

最佳答案

doc是一个宏,所以它不能评估本地 f在调用上下文中。相反,您只需调用 (doc f) ovr 及以上。

解决此问题的最简单方法是绕过 doc宏,并直接查看它用于生成文档的数据:vars 上的元数据。

(defn help 
"Halp!"
[x]
(for [[name var] (ns-publics 'familiar.core)]
[name (:doc (meta var))]))

关于Clojure 函数从命名空间中的函数获取文档字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com