Clojure 单函数参数大hash-map?

Clojure single function argument of large hash-map?

我正在尝试解析 returns CSV 数据(没有 header)的旧 API 的结果。 parse-response 函数运行良好,但是当我尝试使用 verify-response 检查时,它失败并显示 ArityException Wrong number of args (0) passed to: PersistentHashMap。如何通过检查关键字段的函数传递 hash-map 并在无效时创建替代错误 hash-map?

(def response-fields
  [:response_code :response_text
   :address :city :state :zip_code :country
   :phone :fax :email
   :first_name :last_name :company  
   :special_instructions :SpecialCode
   ])

(defn parse-response
  "One line CSV file"
  [response]
  (zipmap response-fields
    (first (csv/read-csv (:body response)))))

(defn verify-response
  "Get response if code is valid"
  [response-map]
  (cond (some? (:response_code response-map)) (response-map)
        :else
        {:response_code "911"
         :response_text "API Failure"}))

verify-response 正文中 response-map 周围有一组错误的括号。 (response-map) 将地图作为不带参数的函数调用。 Clojure 中的地图实现了 IFn 接口;可以使用 1 或 2 个参数调用它们以对自身进行查找,并具有可选的默认值。

user=> ({:a 1} :a)
1
user=> ({:a 1} :b :foo)
:foo
user=> ({:a 1})
;; ArityException Wrong number of args (0) passed to: PersistentArrayMap