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
我正在尝试解析 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