gpt4 book ai didi

clojure - ClojureScript 如何编译闭包?

转载 作者:行者123 更新时间:2023-12-02 16:32:22 25 4
gpt4 key购买 nike

当使用 ClojureScript 时,我尝试定义一个函数,它是一个变量的闭包,如下所示:

(let [x 42] 
(defn foo [n] (+ x n)))

在 Rhino REPL 上打印以下源代码:

function foo(n){
return cljs.core._PLUS_.call(null,x__43,n);
}

该函数按我的预期工作,但是当尝试获取名为 x__43 的变量时,我无法获取它。它去哪儿了?

最佳答案

x 变量是在 foo 函数外部的 let 绑定(bind)中定义的。你无法“得到它”,因为你不在 let 绑定(bind)的范围内。这或多或少就是使用闭包的全部意义。

从概念上讲,let 绑定(bind)是作为函数调用实现的:

(let [x 2] ...)

相当于

((fn [x] ...) 2)

可能类似于 ClojureScript 中实现的 let - 要么作为到 fn 的宏转换,要么直接到 (function (x){...})(2)

关于clojure - ClojureScript 如何编译闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519658/

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