欢迎!请查看 关于 页面以获取更多关于这如何工作的小信息。
ClojureScript 对 {{clojure.string/escape}} 函数的实现假定 {{cmap}} 参数总是映射类型。这使得它不同于(并且特别地不如)Clojure 对函数的实现,后者允许 {{cmap}} 为任何可调用的。
以下是 {{clojure.string/escape}} 实现的相关行,在 (link: https://github.com/clojure/clojure/blob/master/src/clj/clojure/string.clj#L313 text: Clojure) 和 (link: https://github.com/clojure/clojurescript/blob/master/src/main/cljs/clojure/string.cljs#L216 text: ClojureScript)。ClojureScript 实现对 {{cmap}} 调用 {{get}},而 Clojure 实现直接调用 {{cmap}}。
以下是一个在 Clojure 上工作但在 ClojureScript 上不工作的示例,因为它将函数传递给 {{clojure.string/escape}} 而不是映射
`(defn regex-escape"字符串 s 中的正则特殊字符转义。"[s](let [special? #{\- \[ \] \{ \} \( \) \* \+ \? \. \\ \^ \$ \|}]]
`
s
(clojure.string/escape s #(when (special? %) (str \\ %)))))
理想情况下,这个问题将通过改变 ClojureScript 对 {{clojure.string/escape}} 的实现以匹配 Clojure 实现来修复。这将也会与两个平台的函数文档字符串中描述的行为相匹配。
评论由:mfikes 提供
0001-CLJS-2268-Make-clojure.string-escape-constent-with-C.patch 已添加到补丁摊位 (i)