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-constent-with-C.patch已添加到补丁募集(i)

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