reader / read-string是否将元数据附加到表单

时间:2018-03-22 05:09:25

标签: clojure clojurescript

我已经读过cljs.reader/read-string将元数据附加到其创建的表单的位置,例如字符串中的位置。
这是真的吗?它在某处记录了吗? 感谢。

2 个答案:

答案 0 :(得分:1)

read-string不会向返回的表单添加元数据:

=> (meta (cljs.reader/read-string "(prn 0)"))
nil

您编译的函数/ defs / vars将具有此类型的元数据:

=> (meta #'my-fn)
{:ns app.core,
 :name my-fn,
 :file "src/cljs/app/core.cljs",
 :end-column 20,
 :column 1,
 :line 125,
 :end-line 125,
 :arglists ([{:keys [x]}]),
 :doc nil,
 :test nil}

答案 1 :(得分:0)

我不知道 cljs.reader,但如果您使用 clojure.tools.reader,您可以这样做。它没有特别详细的记录,但您可以通过查看测试来了解如何:https://github.com/clojure/tools.reader/blob/master/src/test/cljs/cljs/tools/metadata_test.cljs#L62-L70

简而言之,您必须将字符串传递给 clojure.tools.reader.reader-types/indexing-push-back-reader,然后从那里传递给 clojure.tools.reader/read。 (在上面的测试/示例中,它们首先传递给 reader-types/string-push-back-reader,但这似乎不是绝对必要的)。