【发布时间】:2018-03-22 05:09:24
【问题描述】:
我在某处读到 cljs.reader/read-string 将元数据附加到它创建的表单中,例如读取的字符串中的位置。
这是真的吗?它是否记录在某处?
谢谢。
【问题讨论】:
-
为了记录,我将尝试使用 InstaParse。见the docs about positions as metadata。
标签: clojure clojurescript
我在某处读到 cljs.reader/read-string 将元数据附加到它创建的表单中,例如读取的字符串中的位置。
这是真的吗?它是否记录在某处?
谢谢。
【问题讨论】:
标签: clojure clojurescript
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}
【讨论】:
我不知道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,但这似乎不是绝对必要的)。
【讨论】: