2024 年 Clojure 状态调查 中分享您的想法!

欢迎!请查阅 关于 页面以了解有关此操作的更多信息。

0
ClojureScript

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? #{\- \[ \] \{ \} \( \) \* \+ \? \. \\ \^ \$ \|}])

(clojure.string/escape s #(when (special? %) (str \\ %)))))

`

理想情况下,通过将 ClojureScript 的 {{clojure.string/escape}} 实现更改为遵循 Clojure 的实现来修复此差异。这将与两个平台上描述的功能的文档字符串相匹配。

2 个回答

0

由 mfikes 发表评论

0001-CLJS-2268-Make-clojure.string-escape-constant-with-C.patch 添加到 Patch Tender (i)

0
参考: https://clojure.atlassian.net/browse/CLJS-2268 (由 alex+import 报告)
...