clojure - clojure 读取字符串分数/比率令人惊讶地工作
问题描述
有人问我如何在 Clojure 中解析字符串“1/4”。我回复了以下内容(可能有更好的方法):
(-> "1/25"
(str/split #"/")
(->> (map #(Integer/parseInt %))
(apply /)))
但后来我想我会看看 read-string 做了什么(我在安全的时候用它来解析),令人惊讶的是:
(read-string "1/25")
返回一个clojure.lang.Ratio
.
我根本没想到它能够阅读表达式。谁能解释为什么这有效?
解决方案
两者都是 EDN 规范clojure.core/read
的clojure.edn/read
“超集”。它们支持所有有效的 EDN 和其他一些扩展(例如,比率)
clojure.core/read
可以评估代码。例如(read-string "#=(prn :hello-injection)")
,所以更喜欢clojure.edn/read-string
解析输入
AFIK,cljs.core/read-string
不会读取比率。你也不能1/2
在.cljs
文件中使用。
推荐阅读
- asp.net - Creating Radwindow in code behind and avoiding postback on radwindow close
- html - 如何使用 Delphi 以 HTML 表单执行不同的提交?
- android - 为什么我的颤振应用程序发送无限请求
- visual-studio - vs 2019 社区的安装率停留在 98%
- javascript - 部署 twilio react 插件抛出错误:未找到请求的资源/配置
- julia - 是否有将 REPL 内容打印到 Julia 语言文件的功能?
- c++ - 从向量中删除特定元素不起作用
- python - 在 __str__ 中调用异步函数/属性
- .net - Form 的 TransparencyKey 留下可怕的彩色边缘
- java - 获取 NullPointerException:在空对象引用上的 GoogleMap.setMyLocationEnabled(boolean)