Clojure大型哈希映射的单个函数参数?

时间:2015-03-12 16:32:57

标签: dictionary clojure hashmap argument-passing destructuring

我正在尝试解析返回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"}))

1 个答案:

答案 0 :(得分:2)

response-map正文中verify-response周围有一组错误的括号。 (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