Warm tip: This article is reproduced from serverfault.com, please click

其他-clojure读取字符串分数/比率出奇地工作

(其他 - clojure read-string fraction / ratio surprisingly working)

发布于 2020-12-01 14:54:01

我被问到如何在Clojure中解析字符串“ 1/4”。我回答了以下内容(可能有更好的方法):

(-> "1/25"
  (str/split #"/")
  (->> (map #(Integer/parseInt %))
       (apply /)))

但是后来我以为我只会看到read-string的作用(我将它用于在安全的情况下进行解析),并且令人惊讶地:

(read-string "1/25")

返回clojure.lang.Ratio

我没想到它完全无法读取该表达式。任何人都可以解释为什么这行得通吗?

Questioner
Reut Sharabani
Viewed
11
souenzzo 2020-12-02 02:03:34

这两个clojure.core/readclojure.edn/read是在EDN规范的“超集”。它们支持所有有效的EDN和其他一些扩展名(例如,比率)

clojure.core/read可以评估代码。例如(read-string "#=(prn :hello-injection)"),所以更喜欢clojure.edn/read-string解析输入

AFIK,cljs.core/read-string将不会读取比率。你也不能1/2.cljs文件中使用