Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java.lang.ClassCastException:java.lang.Boolean不能强制转换为clojure.lang.IFn。思想?_Clojure - Fatal编程技术网

获取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)))))

各位,我有下面的函数,但我得到了一个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 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

进行了更正,但似乎没有解决问题