如何使用Clojure阅读器将文本文件中的字符串转换为将要解析的函数

时间:2016-04-04 10:12:17

标签: clojure datomic

我有一个EDN文本文件,其中包含一个创建SQUUID的函数:

[
 {:db/id #db/id[:db.part/people -1001]
  :people.human/uuid (d/squuid)
  ...
]

我正在使用slurp将此文件读入var:

(def seed-data (read-string (slurp "path/to/my-edn-file.edn")))

当读入var时,我希望调用(d / squuid)函数。我相信这与clojure读者有关,但我仍然坚持使用正确的符号在EDN文件中使用。感谢。

1 个答案:

答案 0 :(得分:0)

read-string仅读取表达为String的表单。如果您想评估它们(并且您希望它按照您希望的那样执行d/squuid),则需要eval您的表单:

(def seed-data
  (-> "path/to/my-edn-file.edn"
      (slurp)
      (read-string)
      (eval)))

安全警告

read-stringeval在执行代码时可能会有危险。您应该只将它们用于您认为安全的数据(例如,不是从Web表单,外部API等外部来源提供的)。