2024 Clojure 状态调查中分享您的想法!

欢迎!请参阅关于页面以获取有关如何操作的更多信息。

0
错误

嗨!

我的控制台出现了一个错误,指向我的函数

 (defn sales-by-customer [name-cus]
   (->> sales_2
       (filter #(= (second %) name-cus))
       (map #(* (Integer/parseInt (last %)) (Double. (products_2 (second %)))))
       (reduce +)
    )
  )

sales_2 : [id customers_name products_name quantity]

([1 Sara candies 3] 
 [2 Joe jam 3]
 [3 Sara gum 1])

products_2 : {products_name price}

({candies 6.0} {gum 4.5} {jam 45.1})

基本上,我尝试做的是,当调用 (sales-by-customer "Sara") 时,我想获取萨拉的购买总额,在这个例子中是:(3*6.0 + 1*4.5),并显示结果。

当我调用我的函数时,我得到了以下错误信息

 Syntax error (ClassCastException) compiling at (db.clj:76:1).
class clojure.lang.LazySeq cannot be cast to class clojure.lang.IFn (clojure.lang.LazySeq and clojure.lang.IFn are in unnamed module of loader 'app')

有什么方法可以解决这个问题吗?
我应该得到一个数字...我不知道转换错误发生在哪里...

谢谢!

1 回答

0

您正在将 products_2 作为一个函数调用,但它是一个地图序列,而不是一个函数,这就是那里类转换异常的含义。

地图可以作为函数调用,但地图序列不能

...