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 报告)
...