1

我正在尝试解析返回 CSV 数据(没有标题)的旧 API 的结果。该parse-response功能很好用,但是当我尝试检查它时,verify-response它会以ArityException Wrong number of args (0) passed to: PersistentHashMap. 如何通过检查键字段并在无效时创建替代错误哈希映射的函数传递哈希映射?

(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"}))
4

1 回答 1

2

response-map的主体周围有一组错误的括号verify-response(response-map)将地图作为没有参数的函数调用。Clojure 中的 Map 实现了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
于 2015-03-12T18:01:13.310 回答