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

欢迎!请参阅 关于 页面获取更多关于这如何工作的信息。

0
ClojureScript
cljs.core/test 不接受 Var,这使得它与 Clojure 不一致

Clojure: `(test #'foo)`
实际的 CLJS: `(test foo)`
预期的 CLJS: `(test #'foo)`

Clojure 示例

```
clj
Clojure 1.9.0
user=> (defn ^{:test #(assert false)} foo [] nil)
"#'user/foo"
user=> (test #'foo)
AssertionError 断言失败:false  user/fn--145 (NO_SOURCE_FILE:1)
```

CLJS 示例

```
clj -m cljs.main -r
ClojureScript 1.10.439
cljs.user=> (defn ^{:test #(assert false)} foo [] nil)
"#'cljs.user/foo"
cljs.user=> (test #'foo)
:no-test

cljs.user=> (test foo)
Error: 断言失败:false

cljs.user=> ((:test (meta #'foo)))
Error: 断言失败:false
```

3 个答案

0

评论由:shaunlebron

测试了这个补丁。产生了预期的结果

0

评论由:dnolen

我非常肯定这个补丁必须更保守。只有当有 IMeta 时才调用 meta,否则回退到旧的行为。

0
参考:https://clojure.atlassian.net/browse/CLJS-2978 (由 shaunlebron 报告)
...