1

问题

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

研究

本文表明内联def是一个合适的解决方案,但我无法使其工作。来自前端的调用发生后,Var 仍然未绑定。

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

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

这是 REPL 中 Var 的评估:

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

问题

为什么上面的代码没有将参数的值绑定到 Var?还有其他解决方案吗?

4

1 回答 1

0

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

如果您曾经花费大量时间重现复杂的运行时值,我强烈建议您观看他们的8 分钟演示


我的 inline-def 问题可能是由于在 Var 绑定到一个值后重新加载命名空间引起的。重新启动 VS Code 并再次仔细执行所有操作后,问题就消失了。

于 2021-01-07T18:10:22.377 回答