【问题标题】:Does reader/read-string attach metadata to the forms阅读器/阅读字符串是否将元数据附加到表单
【发布时间】:2018-03-22 05:09:24
【问题描述】:

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

【问题讨论】:

标签: clojure clojurescript


【解决方案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}

【讨论】:

    【解决方案2】:

    我不知道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,但这似乎不是绝对必要的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多