gpt4 book ai didi

Clojure:如何获取定义 map 的文件/行号?

转载 作者:行者123 更新时间:2023-12-04 16:09:50 26 4
gpt4 key购买 nike

我知道我可以从 var 的元数据中获取 :line:file;但是,我正在构建一个系统,用户可以在其中向我传递原始 map ,并且稍后我将最终将数据“链接”在一起。当此链接失败时,我想报告他们指定 map 的文件/行。例如:

 (defn generate-stuff []
(make-thing { :k (make-thing { :k v }) }))

(link (generate-stuff) (other-generator))
;; outputs file/line of the map containing the errant :k/v pair

我认为编写一个宏来将文件/行与集合的元数据关联几乎肯定是要走的路,但由于没有任何“var”可供查看,我不确定从哪里得到该行数字。我看到了 get-line-number 的定义,但它需要一个阅读器,虽然我可以找到所有特殊阅读器和 *default-data-reader-fn* 数据阅读器(即nil),我似乎无法弄清楚如何访问“代码”阅读器。

最佳答案

好的,看起来在宏中使用 &form 就是答案。我写了以下通用测试代码,它似乎工作:

(defmacro make-thing [obj]
(let [f *file*]
(with-meta obj (assoc (meta &form) :file f))))

&form 指的是调用宏的表单,它具有行/列的元数据。特殊的 var file 具有源文件的相对路径。因此,将两者结合到对象上的元数据中会产生所需的结果。

关于Clojure:如何获取定义 map 的文件/行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812123/

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