获取java.lang.ClassCastException:java.lang.Boolean不能强制转换为clojure.lang.IFn。思想?
各位,我有下面的函数,但我得到了一个java.lang.ClassCastException:java.lang.Boolean在运行时不能转换为clojure.lang.IFn“错误。有没有关于如何修复它的想法获取java.lang.ClassCastException:java.lang.Boolean不能强制转换为clojure.lang.IFn。思想?,clojure,Clojure,各位,我有下面的函数,但我得到了一个java.lang.ClassCastException:java.lang.Boolean在运行时不能转换为clojure.lang.IFn“错误。有没有关于如何修复它的想法 (defn tickets [price] (fn [price] ((and proms/med-to-high? (partial checks/price-matches? price)))))
(defn tickets [price] (fn [price] ((and proms/med-to-high?
(partial checks/price-matches? price)))))
我正在尝试在下面的函数中使用上面的函数。我想做的是检查一张票是否有特定的价格,如果没有,则打印该票
(defn right-tickets?
"Returns true for right ticket.Else, print something"
[price]
(if (tickets? price) true (do (println "Ticket not at right price") false)))
如有任何建议,我们将不胜感激
((and proms/med-to-high?
(partial checks/price-matches? price))
这就是您的问题。您计算和表达式,然后尝试将结果布尔值视为函数。尝试从该表达式中删除外圆括号。除了指出的错误
- 全球国家太多了
- 你把计算和报告混为一谈
但是首先,您调用函数tickets?
,定义了一个具有不同名称的tickets
。让我们使用后者
在tickets
中,proms/med to high?
似乎是全局数据。我猜从措辞上看,它适用于某些事件,其中还附加了一些门票价格。我们可以将事件数据表示为地图,例如
{:prom :low, :prices #{10.50 15.00 25.00}}
然后您的票证
功能就可以启动了
(defn tickets [event price]
(and (#{:medium :high} (:prom event)) ((:prices event) price)))
(def ticket-message {nil "No tickets at the price"})
比如,
(tickets {:prom :low, :prices #{10.50 15.00 25.00}} 15.0)
;nil
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 10.0)
;nil
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 15.0)
;15.0
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 10.0)
;nil
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 20.0)
;(10.5 15.0)
但是如果我准备花20英镑买一张票,那么10英镑一张就可以了。所以我想看看合格价格的范围:
(defn tickets [event price]
(and
(#{:medium :high} (:prom event))
(seq (filter (partial >= price) (:prices event)))))
比如,
(tickets {:prom :low, :prices #{10.50 15.00 25.00}} 15.0)
;nil
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 10.0)
;nil
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 15.0)
;15.0
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 10.0)
;nil
(tickets {:prom :medium, :prices #{10.50 15.00 25.00}} 20.0)
;(10.5 15.0)
可能是价格是一张地图,给出了每种价格的门票数量……等等
票证信息功能可以是
(defn tickets [event price]
(and (#{:medium :high} (:prom event)) ((:prices event) price)))
(def ticket-message {nil "No tickets at the price"})
应用于nil
,生成消息,但应用于其他任何内容,生成nil
进行了更正,但似乎没有解决问题