为什么我收到无法动态绑定非动态变量?

2024-05-17

我正在尝试使用 clojure.tools.trace 命名空间的 dotrace 函数。

(dotrace [my-function] (my-function 5))

但我收到了这个错误:

IllegalStateException 无法动态绑定非动态 var:my-ns/my-function clojure.lang.Var.pushThreadBindings (Var.java:339)

这是什么意思?为什么我得到它?

(我使用的是 Clojure 1.3)


我认为你需要将你的函数声明为动态绑定,例如

(def ^:dynamic my-function
   (fn [x] .....))

这样做的原因是,如果您没有明确要求动态变量,Clojure(1.3 以上)将使其成为非动态的,作为性能优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我收到无法动态绑定非动态变量? 的相关文章

  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • 在抛出异常之前重试某件事 3 次 - 在 clojure 中

    我不知道如何在Clojure中实现这段Python代码 for i in range 3 try except e if i 2 raise e else continue else break 我想知道为什么在 Python 中如此简单的
  • Clojure 集合与序列的相等性

    我注意到 Clojure 1 4 似乎很乐意考虑向量等于seq相同的向量 但同样不适用于地图 1 2 seq 1 2 gt true 1 2 seq 1 2 gt false 为什么要这样的行为 这样会有所不同吗 Clojure 的 可以认
  • 为什么我收到无法动态绑定非动态变量?

    我正在尝试使用 clojure tools trace 命名空间的 dotrace 函数 dotrace my function my function 5 但我收到了这个错误 IllegalStateException 无法动态绑定非动态
  • Clojure:只能从尾部位置重复

    我正在尝试递归地反转列表 但是我得到了Can only recur from tail position运行时 这到底意味着什么 如何改进我的代码才能使其正常工作 defn recursive reverse coll loop coll
  • Clojure:无法找到静态字段

    给出以下代码 map Integer parseInt 1 2 3 4 为什么除非我换行 否则会出现以下异常Integer parseInt在匿名函数中并手动调用它 Integer parseInt clojure lang Compile
  • 宏内调用函数和宏的区别?

    我的难题是以下示例 defmacro macro1 x println x defn func1 x println x defmacro macro2 x macro1 x func1 x defmacro macro3 x func1
  • 如何在 Jetty 中以编程方式设置 gzip?

    我正在使用 Noir 和 clojure 编写一个网络应用程序 它使用 Jetty Jetty 有两种使用 gzip 的方法 一种用于静态 一种用于动态 它们在https stackoverflow com a 9113129 104021
  • Clojure 符号名称中的美元符号 ($)

    我一直在编写 clojure 解析器并遇到以下语法 defn key Returns the key of the map entry added 1 0 static true java util Map Entry e e getKey
  • Clojure 中没有整数溢出?

    我在阅读时在 IntelliJ IDEA 中运行 Clojure 1 3 0 和 La ClojureClojure 的乐趣 在第 4 1 3 节 第 64 页 中 作者使用以下代码演示了整数溢出 Integer MAX VALUE Int
  • 我可以在 Java 8 中使用 Clojure 函数作为 Lambda 函数吗?

    我在 Clojure 中使用了许多库来生成符合 Clojure lang IFN https github com clojure clojure blob master src jvm clojure lang IFn java 界面 它
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • clojure - 不同命名空间中的评估代码

    我正在编写类似 REPL Server 的代码 用户的请求在这样的函数中评估 defn execute request str try eval read string request catch Exception e getLocali
  • 使用命令行界面构建 Clojure 应用程序?

    我刚刚开始使用 Clojure 来自 Ruby 我想构建一个带有命令行界面的小型应用程序 如何处理 CL 的输入 输出 我注意到有一个 clojure contrib command line 但文档很少 http github com r
  • 惰性序列内部究竟如何工作

    我是 clojure 的新手 不清楚惰性序列在内部是如何工作的 或者更具体地说 返回惰性序列的函数意味着只有在需要时才会计算结果 例如在下面的例子中 defn fc lazy fn xs lazy seq if let xss seq xs
  • Clojure:对于 n 维

    Clojure 中的函数for可用于迭代嵌套序列 想象一个具有 x y 和 z 轴的 3D 空间 for x range 10 y range 5 z range 2 x y z 上面的代码将生成一个向量序列 表示长方体内所有可能的位置 当
  • Leiningen 在哪里安装 clojure 库?

    第一次运行lien 它会安装clojure 但是要安装吗 似乎并不在 图书馆 图书馆 lein clojure jar 和贡献 jar 在 Unix OS X 标题 上是否有固定位置 Leiningen使用maven 或者更准确地说 是实现
  • 调用 Clojure 高阶函数

    如果我定义一个返回如下函数的函数 defn add n n fn x x n 然后我可以将结果分配给一个符号 def add 1 add n 1 并称其为 add 1 41 gt 42 我如何调用结果 add n 1 而不将其分配给新符号
  • Linux 上的 Clojure 实时浏览器重新加载

    有没有类似的东西机架实时重载 https github com johnbintz rack livereload可以与类似的工具一起使用Guard LiveReload https github com guard guard liver
  • Common Lisp 中的原子和 Clojure 中的原子有什么区别?

    下列page http clojure org atoms讨论原子在 Clojure 中的工作原理 它并没有详细说明 Clojure 和其他 lisp 方言中原子之间的差异 Common Lisp 中的原子和 Clojure 中的原子之间的

随机推荐