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

闭包:ClassCastException java.lang.Boolean不能强制转换为clojure.lang.IFn,clojure,Clojure,我正在定义一个函数“true或false”,该函数将接受一个参数,如果该参数为true,则打印“1”,如果为false,则打印“0”,但当我使用该参数运行函数时: (= 5 4) 它返回错误:“ClassCastException java.lang.Boolean无法转换为clojure.lang.IFn” 代码: clojure.lang.IFn接口提供对调用函数的访问,但是传递给true或false的似乎是一个数字。您不应该将x括在if中的括号中–这意味着您正在调用x函数调用(请参见if

我正在定义一个函数“true或false”,该函数将接受一个参数,如果该参数为true,则打印“1”,如果为false,则打印“0”,但当我使用该参数运行函数时:

(= 5 4)
它返回错误:“ClassCastException java.lang.Boolean无法转换为clojure.lang.IFn”

代码:


clojure.lang.IFn
接口提供对调用函数的访问,但是传递给
true或false
的似乎是一个数字。您不应该将
x
括在
if
中的括号中–这意味着您正在调用
x
函数调用(请参见
if
特殊表单)。

通过
clojure.lang.IFn
接口可以访问调用函数,但是您传递给
的是真还是假
似乎是一个数字。您不应该将
x
括在
if
内的括号中–这意味着您正在调用
x
函数调用(请参见
if
特殊表单中的)

(defn true-or-false [x] (if (x)
  (println "1")
  (println "0")))

(def a (= 5 4))

(true-or-false a)