小编Jam*_*mes的帖子

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

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

(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))])))
Run Code Online (Sandbox Code Playgroud)

当我(help)在REPL中调用时,文档字符串没有附带函数:

familiar.core=> (help)
([save-experiment ""] [load-experiment ""] [add-data ""] [help ""] ... )
Run Code Online (Sandbox Code Playgroud)

但是(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"
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

clojure

5
推荐指数
1
解决办法
1261
查看次数

在 Clojure 中将已排序的映射保存+读取到文件

我正在通过spit. 我希望我的地图中的一些地图被排序,并在我slurp将地图返回到我的程序时保持排序。排序映射没有唯一的文字表示,因此当我spit将映射映射到磁盘上时,排序映射和未排序映射的表示相同,并且#(read-string (slurp %))数据使每个映射成为通常的未排序类型。这是一个说明问题的玩具示例:

(def sorted-thing (sorted-map :c 3 :e 5 :a 1))
;= #'user/sorted-thing
(spit "disk" sorted-thing)
;= nil
(def read-thing (read-string (slurp "disk")))
;= #'user/read-thing

(assoc sorted-thing :b 2)
;= {:a 1, :b 2, :c 3, :e 5}
(assoc read-thing :b 2)
;= {:b 2, :a 1, :c 3, :e 5}
Run Code Online (Sandbox Code Playgroud)

有没有办法首先按排序读取地图,而不是在阅读后将它们转换为排序地图?或者这是我应该使用某种真实数据库的迹象?

clojure

5
推荐指数
1
解决办法
1200
查看次数

标签 统计

clojure ×2