Debugging Clojure:捕获函数arg的运行时值,用于REPL 问题

Debugging Clojure:捕获函数arg的运行时值,用于REPL 问题,debugging,clojure,inline,read-eval-print-loop,vscode-calva,Debugging,Clojure,Inline,Read Eval Print Loop,Vscode Calva,我的web前端使用复杂参数调用后端查询。在开发过程中,为了避免耗时的手动复制这些参数,我想在Vars中捕获它们的值,可以在REPL中使用 研究 这表明内联def是一个合适的解决方案,但我无法让它工作。前端调用发生后,Var保持未绑定状态 我通过VS Code+Calva使用REPL启动了后端,代码如下: (defn按类别获取分析[params] (def params params) ...) 以下是对REPL中Var的评估: #object[clojure.lang.Var$Unbound

我的web前端使用复杂参数调用后端查询。在开发过程中,为了避免耗时的手动复制这些参数,我想在Vars中捕获它们的值,可以在REPL中使用

研究 这表明内联def是一个合适的解决方案,但我无法让它工作。前端调用发生后,Var保持未绑定状态

我通过VS Code+Calva使用REPL启动了后端,代码如下:

(defn按类别获取分析[params]
(def params params)
...)
以下是对REPL中Var的评估:

#object[clojure.lang.Var$Unbound 0x1298f89e“Unbound:#'urbest.db.querys/params”]
问题:
为什么上面的代码没有将参数的值绑定到Var?还有其他解决方案吗?

我发现最好的方法是使用库。它通过在函数中添加一行来捕获所有局部变量,然后使用另一行,您可以将所有这些变量定义为全局变量,这允许您使用运行时值在REPL中对函数中的任何子表达式求值

如果您曾经花费大量时间重新生成复杂的运行时值,我强烈建议您查看它们



内联def的问题可能是由于将Var绑定到某个值后重新加载命名空间引起的。重新启动VS代码并小心地再次执行所有操作后,问题消失了。

我发现的最好方法是使用库。它通过在函数中添加一行来捕获所有局部变量,然后使用另一行,您可以将所有这些变量定义为全局变量,这允许您使用运行时值在REPL中对函数中的任何子表达式求值

如果您曾经花费大量时间重新生成复杂的运行时值,我强烈建议您查看它们



内联def的问题可能是由于将Var绑定到某个值后重新加载命名空间引起的。重新启动VS代码并小心地再次执行所有操作后,问题消失了。

尝试添加一个带有arg值的println,以验证函数是否被调用,并且您正在从前端获得预期值。@AlanThompson,已尝试println,函数按预期调用。如何定义一个带有公共静态字段的自定义Java类,您可以在该字段中放置值以供以后读取?请尝试添加一个带有arg值的
println
,以验证函数是否被调用,以及您是否从前端获得了预期值。@AlanThompson,已经尝试了
println
,该函数按预期调用。使用公共静态字段定义一个自定义Java类,您可以在其中放置值以供以后读取如何?您可能想看看“defonce”。您可能想看看“defonce”。