Clojure lein ring-无法在ring jetty适配器上调用configurator函数;“标记对象”没有读取器功能;错误

Clojure lein ring-无法在ring jetty适配器上调用configurator函数;“标记对象”没有读取器功能;错误,clojure,leiningen,ring,Clojure,Leiningen,Ring,使用lein-ring插件,我尝试将configurator函数传递给ring-jetty适配器。再现问题的最小project.clj,其灵感来自: 问题在于,它失败时会出现以下错误: $ lein ring server-headless Exception in thread "main" java.lang.RuntimeException: No reader function for tag object, ... ... 使用fn表单或defn单独声明函数不会影响结果。现在我意识到

使用
lein-ring
插件,我尝试将
configurator
函数传递给ring-jetty适配器。再现问题的最小
project.clj
,其灵感来自:

问题在于,它失败时会出现以下错误:

$ lein ring server-headless
Exception in thread "main" java.lang.RuntimeException: No reader function for tag object, ...
...
使用
fn
表单或
defn
单独声明函数不会影响结果。现在我意识到这可能与
lein-ring
本身无关,但我只是在
:configurator
上重现了这个问题(例如,调用函数来设置项目描述工作正常)


我想了解,为什么会发生这种情况(首先要了解错误消息本身),最后,当使用
lein-ring
插件时,如何实际传递配置程序函数。

为什么使用#(…)而不仅仅是#(…)?我从另一个SO答案中理解()不计算
defproject
下的值,因此需要将其取消引号。简单地说,如果我离开
#(…)
-reader宏扩展到
(fn…
列表,但没有进行任何计算,我会得到一个“PersistentList不能转换为IFn”错误。据我所知,当未加引号时,
(fn…
表单应该实际计算,并且定义的函数应该是与
:configurator
相关联的结果,现在我明白了。我会用一个“真正的”匿名函数而不是简写版本来尝试你的解决方案,比如试试~(fn[x](println(.getClass x)),看看是否有效。我猜解析defproject的环境不包括速记匿名函数定义的标记是的,尝试过了。如上所述,使用
fn
或同时使用
defn
defproject
之外声明函数不会更改任何内容-会引发相同的错误。很抱歉,错过了此错误。您可以尝试将org.clojure/tools.reader添加到依赖项中。我认为它不会解决这个问题,但它可能会提供额外的错误/调试信息。我的猜测是,由于某种原因,在解析输入时,读取器无法解释令牌/标记。但是,目前还不清楚是什么项目导致了这种情况,因此额外的回溯信息可能有助于确定读者不了解的内容以及为什么使用#(…)而不是仅仅使用#(…)?我从另一个so答案()中了解到,
defproject
下的值不会被计算,因此需要将它们取消引号。简单地说,如果我离开
#(…)
-reader宏扩展到
(fn…
列表,但没有进行任何计算,我会得到一个“PersistentList不能转换为IFn”错误。据我所知,当未加引号时,
(fn…
表单应该实际计算,并且定义的函数应该是与
:configurator
相关联的结果,现在我明白了。我会用一个“真正的”匿名函数而不是简写版本来尝试你的解决方案,比如试试~(fn[x](println(.getClass x)),看看是否有效。我猜解析defproject的环境不包括速记匿名函数定义的标记是的,尝试过了。如上所述,使用
fn
或同时使用
defn
defproject
之外声明函数不会更改任何内容-会引发相同的错误。很抱歉,错过了此错误。您可以尝试将org.clojure/tools.reader添加到依赖项中。我认为它不会解决这个问题,但它可能会提供额外的错误/调试信息。我的猜测是,由于某种原因,在解析输入时,读取器无法解释令牌/标记。然而,目前还不清楚是什么项目导致了这种情况,因此额外的回溯信息可能有助于确定读者不理解的内容
$ lein ring server-headless
Exception in thread "main" java.lang.RuntimeException: No reader function for tag object, ...
...