闭包:ClassCastException无法将java.lang.Boolean强制转换为clojure.lang.IFn

时间:2016-10-28 16:23:57

标签: clojure

我正在定义一个函数" true-or-false"这将采取一个论点并打印" 1"如果是真的那么" 0"如果它是假的,但当我用参数运行我的函数时:

(= 5 4)

它返回错误:" ClassCastException java.lang.Boolean不能强制转换为clojure.lang.IFn"

代码:

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

(def a (= 5 4))

(true-or-false a)

1 个答案:

答案 0 :(得分:2)

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