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

欢迎!请参阅关于页面以获取更多有关这些信息。

0
ClojureScript
给任何使用cljs.core/this-as的函数添加post-condition会导致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");
dummy.test_object.methodWithPostcondition("C");
0
参考: https://clojure.atlassian.net/browse/CLJS-1123 (由 alex+import 报告)
...