gpt4 book ai didi

javascript - 如何在编译时在 javascript 全局命名空间中定义一个 clojurescript 函数?

转载 作者:数据小太阳 更新时间:2023-10-29 04:35:11 25 4
gpt4 key购买 nike

我正在寻找一种在编译时在 Javascript 全局命名空间中定义 Clojurescript 函数的方法。我所说的编译时是指我希望 Clojurescript 编译器输出:function some_fn() { }。我知道这不是惯用的,一切都应该驻留在命名空间中,但我所处的环境迫使我这样做。因此,理想情况下,类似于 (defn ^:global some-fn []) 的工作方式类似于 :export 的工作方式,但忽略了 namespace 。

我知道使用 goog.global 定义全局函数的运行时方法,例如(set!goog.global.someFunction some-clojure-fn) 但这在我的环境中不起作用。

最佳答案

也许您可以在命名空间中定义它,然后在窗口(或 GLOBAL 或 this 取决于您的环境)对象中公开它:

(defn foo [x] (* 2 x))
(aset js/window "foo" myns/foo) ;; where myns is where foo is defined

然后您应该能够从窗口(这是浏览器中的全局 JavaScript 命名空间)调用 foo

更新:正如@TerjeNorderhaug 所建议的,您可以像这样在全局命名空间中设置一个变量:

(set! js/foo foo)

关于javascript - 如何在编译时在 javascript 全局命名空间中定义一个 clojurescript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com