我被问到如何在Clojure中解析字符串“ 1/4”。我回答了以下内容(可能有更好的方法):
(-> "1/25"
(str/split #"/")
(->> (map #(Integer/parseInt %))
(apply /)))
但是后来我以为我只会看到read-string的作用(我将它用于在安全的情况下进行解析),并且令人惊讶地:
(read-string "1/25")
返回clojure.lang.Ratio
。
我没想到它完全无法读取该表达式。任何人都可以解释为什么这行得通吗?
这两个clojure.core/read
和clojure.edn/read
是在EDN规范的“超集”。它们支持所有有效的EDN和其他一些扩展名(例如,比率)
clojure.core/read
可以评估代码。例如(read-string "#=(prn :hello-injection)")
,所以更喜欢clojure.edn/read-string
解析输入
AFIK,cljs.core/read-string
将不会读取比率。你也不能1/2
在.cljs
文件中使用。