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

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

0
ClojureScript
向任何使用 cljs.core/this-as 的函数添加后置条件将意外地将 this-as 的 "this" 符号绑定到根对象(例如,js/window)。

{code:none}
(defn f-no-post-condition [argument]
  (this-as this
    (js/console.log argument this)))

(defn f-with-post-condition [argument]
  {:post [true]}
  (this-as this
    (js/console.log argument this)))

(def test-object
  #js {:methodNoPostcondition f-no-post-condition
       :methodWithPostcondition f-with-post-condition})

(f-with-post-condition "A") ; 正确输出js/window
(.methodNoPostcondition test-object "B") ; 正确输出test-object
(.methodWithPostcondition test-object "C") ; 错误地输出js/window

3 答案

0

评论者:dnolen

这很可能是 CLJS-719 的另一种表现形式。

0
_评论者:thheller_

刚刚检查生成的JavaScript。正如David说的,问题是用于获取:post条件结果的额外函数。


dummy.f_no_post_condition = (function f_no_post_condition(argument){
var this$ = this;
var G__82157 = argument;
var G__82158 = this$;
return console.log(G__82157,G__82158);
});
dummy.f_with_post_condition = (function f_with_post_condition(argument){
var _PERCENT_ = (function (){
var this$ = this;
var G__82161 = argument;
var G__82162 = this$;
})();


return console.log(G__82161,G__82162);
});
return _PERCENT_;
dummy.test_object = {"methodWithPostcondition": dummy.f_with_post_condition, "methodNoPostcondition": dummy.f_no_post_condition};
dummy.f_with_post_condition("A");
dummy.test_object.methodNoPostcondition("B");
0
参考:[https://clojure.atlassian.net/browse/CLJS-1123](https://clojure.atlassian.net/browse/CLJS-1123)(由alex+import报告)
...