欢迎!请查阅 关于 页面以了解有关此操作的更多信息。
ClojureScript 对 {{clojure.string/escape}} 函数的实现假定了 {{cmap}} 参数总是映射。这使得它与 Clojure 对同一函数的实现不同(并具体来说,不如其通用),Clojure 同样函数可以实现 {{cmap}} 为可调用对象。
以下是 {{clojure.string/escape}} 的相关实现行:(链接:https://github.com/clojure/clojure/blob/master/src/clj/clojure/string.clj#L313 文本:Clojure)以及(链接:https://github.com/clojure/clojurescript/blob/master/src/main/cljs/clojure/string.cljs#L216 文本:ClojureScript)。ClojureScript 实现调用 {{get}} 于 {{cmap}},而 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-constant-with-C.patch 添加到 Patch Tender (i)