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)
错误:断言失败:false

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

3 个答案

0 投票

由 shaunlebron 发表的评论

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

0 投票

由 dnolen 发表的评论

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

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