Clojure:捕获函数arg的运行时值,用于repli

问题描述 投票:0回答:2
我的Web前端使用复杂的参数调用后端查询。在开发过程中,为避免对这些论点进行耗时的手动复制,我想捕获它们的VAR值,这些值可用于repl。

研究 this

article

表明,内联DEF是一个合适的解决方案,但我无法使其起作用。在前端的电话发生后,VAR仍然没有绑定。

I通过VS Code + Calva启动了后端,并使用以下代码:

(defn get-analytics-by-category [params] (def params params) ...)

这是对复制中Var的评估:

#object[clojure.lang.Var$Unbound 0x1298f89e "Unbound: #'urbest.db.queries/params"]

问题
为什么上述代码没有将参数的值绑定到VAR?还有另一个解决方案吗?
    

我发现的最好方法是使用
Scope-capture
库。它通过在函数中添加1行捕获所有局部变量,然后使用另一个1线片将所有这些变量定义为全局,该变量允许您使用运行时值在函数中的任何子表达中进行评估。

如果您花了很多时间再现复杂的运行时值,我强烈建议您观看他们的

8分钟示范。

Inline-DEF的问题可能是由于VAR绑定到值后的重新加载名称空间而引起的。重新启动VS代码并仔细地完成所有操作后,问题消失了。

debugging clojure inline read-eval-print-loop vscode-calva
2个回答
1
投票
它比范围捕获更灵活,但需要更多的工作才能使变量在执行外。 VS Code的CALVA扩展名带有一个,也有Emacs软件包。

现在我使用

Playback

. 它捕获了弹药,局部变量等等,仅在正确的位置添加了宏。还包括功能重播。

您跟踪的值放在
端口

中,即使很容易浏览和重复使用大型数据结构。


0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.