在Clojure中吐出并啜饮一个矢量

Ali*_*Ali 6 serialization clojure

我试图将像[[1 2 3] [4 5 6]]这样的矢量吐到一个文件中然后啜饮它,但是当我啜饮它时,我得到一个字符串而不是矢量.即使我评估我得到的字符串,它仍然给出一个字符串.我试图使用(向量slurpt-string)它仍然给出一个包含字符串的元素向量.任何意见?

提前致谢.

May*_*iel 7

clojure.core /读取字符串

(spit "foo" [[1 2 3] [4 5 6]])

(slurp "foo") ; "[[1 2 3] [4 5 6]]"

(read-string *1) ; [[1 2 3] [4 5 6]]

(type *1) ; clojure.lang.PersistentVector


(read-string "[[1 2 3] [4 5 6]]")

  • @Ali你可以在`read-string`向量之前使用绑定将`*read-eval*`设置为false:`(binding [*read-eval*false](read-string ...))`.然后,您可以检查并确保它是一个向量并继续您的业务. (5认同)
  • @Ali小心你用read-string读到的东西.它可以读取任何可以读取的对象,而不仅仅是向量.这包括代码.如果*read-eval*设置为true(默认情况下是这样)并且字符串使用#= read-eval宏,则read-string甚至可以执行代码.因此,它可能被恶意使用.例如,有人将代码中的向量替换为`rm -rt/home/ali /`;) (2认同)