ClassCastException:java.lang.Boolean不能强制转换为clojure.lang.IFn

ClassCastException:java.lang.Boolean不能强制转换为clojure.lang.IFn,clojure,Clojure,堆栈溢出用户通过电子邮件向我发送的问题: 我有以下功能: (defn partial-or-fill-at-test? [price] (if (partial-or-fill-at? price) true (do (println "WRONG PRICE") false))) 当我使用它时,我得到以下错误: java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn 我想让它在

堆栈溢出用户通过电子邮件向我发送的问题:

我有以下功能:

(defn partial-or-fill-at-test? [price]
  (if (partial-or-fill-at? price) true (do (println "WRONG PRICE") false)))
当我使用它时,我得到以下错误:

java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn
我想让它在谓词的结果为false时打印一些东西。任何帮助都可以


问题出在您对
部分或填充的定义中。
。如果我尝试将
partial或fill at?
作为函数进行简单定义,则一切正常:

(defn partial-or-fill-at? [price] (> price 100))

(defn partial-or-fill-at-test? [price]
  (if (partial-or-fill-at? price) true (do (println "WRONG PRICE") false)))
错误消息
java.lang.Boolean不能强制转换为clojure.lang.IFn
,这意味着在某个地方,您有一个布尔值(
true
false
)正试图用作
IFn
(clojure的函数名)

代码中的
true
false
文本被用作值,而不是函数,因此这不是问题所在。布尔值可以像函数一样使用的唯一地方是
部分或填充?
。如果使用布尔值定义它,使用
def
而不是
defn
,则会出现此错误。例如,可能是您无意中编写了以下内容:

; earlier in the code
(def price 500)

; …

(def partial-or-fill-at? (> price 100))
你的意思是:

(defn partial-or-fill-at? [price] (> price 100))

检查
部分或填充位置的定义?
——同时确保所有括号都平衡,并且定义涵盖了您期望的代码部分——并找出如何将其值从布尔值更改为函数。

Cn是否粘贴
部分或填充位置的代码?否则就不可能知道出了什么问题。@DiegoBasch我给那个人发了电子邮件,并把他们和这个问题联系起来;只有他们有密码@Andrews,如果您需要帮助查找
部分或填写处的问题,请编辑此问题以包含该函数的代码。
(defn partial-or-fill-at? [price] (> price 100))