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

欢迎!请参阅关于页面了解此工作的更多信息。

0
ClojureScript

str函数应处理Symbol.for生成的原始JavaScript符号。目前str函数由于通过使用隐式的字符串转换(.join #js (link: x) "")遇到一些JavaScript安全性检查而抛出异常。
有关安全性检查的更多信息,请参阅: http://www.2ality.com/2014/12/es6-symbols.html
此问题还与以下问题相关
- http://dev.clojure.org/jira/browse/CLJS-1628
- http://dev.clojure.org/jira/browse/CLJS-890

`
(def x (.for js/Symbol "x"))
(str x)
TypeError:无法将符号值转换为字符串

at Array.join (native)
at Function.cljs.core.str.cljs$core$IFn$_invoke$arity$1 (/home/roman/workspace/clojurescript/.cljs_node_repl/cljs/core.js:9561:12)
at Object.cljs$core$str [as str] (/home/roman/workspace/clojurescript/.cljs_node_repl/cljs/core.js:9543:22)
at repl:1:100
at repl:9:3
at repl:14:4
at Object.exports.runInThisContext (vm.js:54:17)
at Domain.<anonymous> ([stdin]:41:34)
at Domain.run (domain.js:228:14)
at Socket.<anonymous> ([stdin]:40:25)

`

直接调用toString方法在符号上工作

(.toString x) ;;=> "Symbol(x)"

3 个答案

0
_评论由:mfikes_制作

单元测试在Travis中失败(可能是在旧环境中)

JavaScriptCore


错误在(test-cljs-1631) (core-advanced-test.js:3724:60)
预期: (= "Symbol(x)" (str (.for js/Symbol "x")))
  实际: #object[ReferenceError ReferenceError: Can't find variable: Symbol]


Nashorn


错误在(test-cljs-1631) (ReferenceError:NaN:NaN)
预期: (= "Symbol(x)" (str (.for js/Symbol "x")))
  实际: #object[ReferenceError ReferenceError: "Symbol" is not defined]


由于这似乎仅影响测试,而不影响生产代码,也许可以将测试条件设置为{{(exists? js/Symbol)}}。
0

评论由:thheller制作

关于{{str}} fn/macro的历史以及为什么它们这样做有很多原因。

请参阅: https://dev.clojure.org/jira/browse/CLJS-890

补丁仅使用{{toString}},但我们必须解决CLJS-890才能选择该选项。

0
by
参考资料:https://clojure.atlassian.net/browse/CLJS-1631(由r0man发布)
...