Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:如何获取定义地图的文件/行号?_Clojure_Reader - Fatal编程技术网

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

Clojure:如何获取定义地图的文件/行号?,clojure,reader,Clojure,Reader,我知道我可以从变量上的元数据获取:行和:文件;然而,我正在构建一个系统,用户可以将原始地图传递给我,我将在稍后将数据“链接”到一起。当这个链接失败时,我想报告他们在其中指定映射的文件/行。例如: (defn generate-stuff [] (make-thing { :k (make-thing { :k v }) })) (link (generate-stuff) (other-generator)) ;; outputs file/line of the map con

我知道我可以从变量上的元数据获取
:行
:文件
;然而,我正在构建一个系统,用户可以将原始地图传递给我,我将在稍后将数据“链接”到一起。当这个链接失败时,我想报告他们在其中指定映射的文件/行。例如:

 (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行号的定义,但它需要一个读卡器,虽然我可以找到所有的特殊读卡器和
*默认数据读卡器fn*
数据读卡器(为零),但我似乎不知道如何访问“code”读卡器。

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

(defmacro make-thing [obj]
  (let [f *file*]
    (with-meta obj (assoc (meta &form) :file f))))
&form
引用调用宏的表单,它具有行/列的元数据。特殊的var文件具有源文件的相对路径。因此,将这两者结合到对象的元数据中会得到所需的结果