1

Я пытаюсь проанализировать результат старого API, который возвращает CSV-данные (без заголовка). Функция parse-response отлично работает, но когда я пытаюсь проверить с помощью verify-response, она не работает с ArityException Wrong number of args (0) passed to: PersistentHashMap. Как передать хэш-карту через функцию, которая проверяет поле ключа и создает альтернативную хэш-карту ошибки, если она недействительна?Clojure аргумент одной функции большой хэш-карты?

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

Похож на странствующий набор парен вокруг карты ответа. – Alex

+0

Отлично, @Alex, вот и все. Благодаря! – sventechie

+2

@Alex, это должно быть принято и принято, поэтому этот вопрос не отображается как «без ответа». –

ответ

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