Serialization 在Clojure中吐出并吞咽一个向量

Serialization 在Clojure中吐出并吞咽一个向量,serialization,clojure,Serialization,Clojure,我试图将类似[[1 2 3][4 5 6]]的向量吐入一个文件,然后再将其发音,但当我发音时,得到的是字符串而不是向量。即使我计算得到的字符串,它仍然是一个字符串。我尝试使用(vectors slurpt string),但它仍然提供了一个包含字符串的单元素向量。 有什么评论吗 提前感谢。 (吐“foo”[[1 2 3][4 5 6]]) (咕噜“foo”);“[[1 2 3][4 5 6]]” (读取字符串*1);[[1 2 3][4 5 6]] (类型*1);clojure.lang.Per

我试图将类似[[1 2 3][4 5 6]]的向量吐入一个文件,然后再将其发音,但当我发音时,得到的是字符串而不是向量。即使我计算得到的字符串,它仍然是一个字符串。我尝试使用(vectors slurpt string),但它仍然提供了一个包含字符串的单元素向量。 有什么评论吗

提前感谢。

(吐“foo”[[1 2 3][4 5 6]])

(咕噜“foo”);“[[1 2 3][4 5 6]]”

(读取字符串*1);[[1 2 3][4 5 6]]

(类型*1);clojure.lang.PersistentVector



(读字符串“[[1 2 3][4 5 6]]”

@Ali尽管读字符串时要小心。它可以读取任何可以读取的对象,而不仅仅是向量。这包括代码。如果read eval设置为true(默认情况下为true),并且字符串使用#=read eval宏,则read string甚至可以执行代码。因此,它有可能被恶意使用。例如,有人将文件中的向量替换为
rm-rt/home/ali/
;)@Rayne我实际上想用它将向量的更新版本从服务器发送到客户端并返回。我的环境是一个没有连接到外部的本地集群,我认为它没有恶意活动!(我知道,我知道!)。但是如果不是,那么我需要获取字符串并对其进行分析,以确保我只对向量进行了正确的计算?@Ali您可以在读取字符串之前使用binding将
*read eval*
设置为false,向量:
(binding[*read eval*false](read string..)
。然后,您可以检查并确保它是一个向量,然后继续您的业务。对于那些在现代Clojure时代阅读的人,只需使用
(Clojure.edn/read-string(slurp“file或url”)
,以避免运行可能的恶意代码。您可能必须先
(需要'clojure.edn)