【发布时间】:2014-10-19 19:05:50
【问题描述】:
我之前有一个 api,其中包含许多函数,所有这些函数都需要一个非常特殊格式的地图。在记录这个 API 时,我发现在每个函数的文档字符串中我都在重复“调用这个函数的地图必须是这样那样的格式,并且地图的这个字段意味着这样那样。”
所以我认为这些函数最好记录一个记录,而我可以只记录记录。但是,似乎无法记录记录,至少以任何方式由 doc 宏或 Marginalia 解释。
here 建议的解决方案是“只需在记录的元数据中添加一个 :doc 键”。
我尝试了(defrecord ^{:doc "Here is some documentation"} MyRecord [field1 field2]),但对其进行宏扩展表明它没有任何效果。 defrecord 还返回一个 java.lang.class 的实例,它没有实现 IMeta,所以我不确定我们可以给它元数据吗?
- 应如何记录记录?
- 记录在这里是合适的解决方案吗?
【问题讨论】:
-
如果您在该线程中进一步阅读,您会发现将 :doc 键添加到记录的元数据将不起作用。请注意,您可以将文档字符串添加到协议中。
-
但this 堆栈溢出答案建议不要编写仅由一条记录实现的协议,这可能会发生。
-
一个解决方案是像
prismatic/schema这样的库,它允许您指定您将接受的数据类型,还允许验证提供的参数。 -
临时解决办法是在 defrecord 前面加上一个以两个分号开头的注释,这对 marg 有效,但在 repl 中无效
标签: clojure documentation record