clojure 和 clojurescript 中 "take" 的区别?

difference with "take" in clojure and clojurescript?

我今天遇到了一个超级奇怪的问题

(let [t :cognitive
      tab (name t)
      tab-name (string/join "" (take 3 (string/split tab #"")))]
  (println "@@@" t tab tab-name))

returns

@@@ :cognitive cognitive cog

在 clojure 中,但是

@@@ :cognitive cognitive co

在 clojurescript 中(使用试剂呈现)。注意 cljs 版本

中缺少的 g

我在 (take 3 ... 表达式前后尝试了 doall,但无济于事

顺便说一句,我正在使用

[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.170"]

我的 cljs 项目,

[org.clojure/clojure "1.8.0"]

对于 clj 项目

在 cljs 中:

(string/split (name :cognitive) #"")

给你:

["" "c" "o" "g" "n" "i" "t" "i" "v" "e"]

所以你的 (take 3 ... 正在服用 """c""o"

至于原因——clojure 和 clojurescript 调用的底层 String.split java 方法可能在不同版本之间表现不同。 [已编辑]