2014-10-13 3 views
1

вопрос, который пользователь Stack Overflow по электронной почте мне:ClassCastException: java.lang.Boolean не может быть приведен к clojure.lang.IFn

У меня есть ниже функция:

(defn partial-or-fill-at-test? [price] 
    (if (partial-or-fill-at? price) true (do (println "WRONG PRICE") false))) 

I получить ошибку ниже, когда я использую его:

java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn 

Я хочу к нему, чтобы напечатать что-нибудь, когда результат этого предиката является ложным. Любая помощь поможет.

+0

Cn вы вставляете код для 'partial-or-fill-at'? В противном случае невозможно понять, что случилось. –

+0

@DiegoBasch Я отправил письмо по электронной почте и связал их с этим вопросом; только они имеют код. @Andrews, если вам нужна помощь в поиске проблемы в 'partial-or-fill-at?', Тогда, пожалуйста, отредактируйте этот вопрос, чтобы включить код для этой функции. –

ответ

1

Проблема в вашем определении partial-or-fill-at?. Если я пытаюсь простое определение partial-or-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))) 
user=> (partial-or-fill-at-test? 200) 
true 
user=> (partial-or-fill-at-test? 50) 
WRONG PRICE 
false 

Сообщение об ошибке java.lang.Boolean cannot be cast to clojure.lang.IFn означает, что где-то, у вас есть логическое значение (true или false), который пытается использовать в качестве a IFn (имя функции Clojure для функции).

В вашем коде используются литералы true и false, а не как функции, поэтому это не проблема. Единственное место, где логическое значение можно использовать как функцию, - partial-or-fill-at?. Если вы определили его с логическим значением, используя def вместо defn, вы получите эту ошибку. Например, возможно, вы случайно написал:

; earlier in the code 
(def price 500) 

; … 

(def partial-or-fill-at? (> price 100)) 

, когда вы имели в виду это:

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

Проверьте ваше определение partial-or-fill-at? - также убедившись, что все Скобки баланс и что определение охватывает раздел кода вы ожидаете этого - и выясните, как изменить его значение с булева на функцию.

Смежные вопросы