У меня есть маленькая функция замыкания:
(defn split-legal-ref
"Highly specific function that expects one AssessPro map and a map key,
from which book and page will be extracted."
[assess-pro-acct extract-key]
(let [[book page] (cstr/split (extract-key assess-pro-acct) #"-")]
(list (cstr/trim book) (cstr/trim page))))
Учитывая это: (extract-key assess-pro-acct) #"-")
, значение extract-key
равно :legal_ref
. Таким образом, он извлекает одно значение типа 927-48
из карты и разделяет значение, используя '-'. Мне просто нужно поймать, когда нет одного из тех хороших значений. Вот где разбиение возвращает ноль.
Итак, я застрял, пытаясь заменить исходную функцию следующим.
(def missing-book 888)
(def missing-page 999)
.
.
.
(defn split-legal-ref
"Highly specific function that expects one AssessPro map and a map key,
from which book and page will be extracted."
[assess-pro-acct extract-key]
(let [[book page] (cstr/split (extract-key assess-pro-acct) #"-")]
(let [[trimBook trimPage] ((if book (cstr/trim book) (missing-book))
(if page (cstr/trim page) (missing-page)))]
(list (trimBook) (trimPage)))))
Проблема в том, что я продолжаю получать страшную
String cannot be cast to clojure.lang.IFn From Small Clojure Function
ошибку. Как я могу реструктурировать эту функцию, чтобы избежать ошибки?
Опубликовать ответы Редактировать:
Спасибо за ответы:
Я переработал функцию, чтобы проверить наличие «-» в строке. Если его там нет, я использую фиктивный "888-99" в качестве значения, когда его там нет.
(def missing-book-page "888-99")
.
.
.
(defn split-legal-ref
"Highly specific function that expects one AssessPro map and a map key,
from which book and page will be extracted."
[assess-pro-acct extract-key]
(let [[book page]
(if (.contains "-" (extract-key assess-pro-acct))
(cstr/split (extract-key assess-pro-acct) #"-")
(cstr/split missing-book-page #"-"))]
(list (cstr/trim book) (cstr/trim page))))