2014-04-23 3 views
4

A clojure новичок вопрос. Я пытаюсь найти лучший способ передать дату от клиента (написанного на любом языке) на сервер, написанный в clojure, который опирается на базу данных Datomic. Чтобы избежать проблем с языковыми классами, я планировал передать дату как форматированную строку RFC3339. Тем не менее, у меня возникли проблемы с разбором строки в Clojure. Мое, по-видимому, ошибочное предположение заключалось в том, что я мог сделать:Clojure мгновенный/parse-timestamp использование

(clojure.instant/parse-timestamp "2014") 

и тем самым получить мгновение. Тем не менее, этот результат вызова в

clojure.lang.ArityException: Wrong number of args (1) passed to: instant$fn--6183$fn … 

Это путает меня сильно с тех пор, насколько я могу видеть эту функцию принимает только один аргумент (отформатированные строки).

Что я пропустил?

+0

Только что заметил, что parse-timestamp является переменной, а не функцией. Но мне все еще интересно, как он используется для синтаксического анализа строки. – Litterate

+0

Глобальные функции живут в 'var's. См. ['Def'] (http://clojure.org/special_forms#def). 'defn' основан на' def'. – Thumbnail

ответ

10

parse-timestamp является функцией двух аргументов. Строковое представление метки времени является второй. Первый - для передачи в функции, которая принимает кучу аргументов и создает объект, представляющий мгновение. Аргументы этой функции new-instant описаны в документе dockstring parse-timestamp - см. (doc clojure.instant/parse-timestamp).

Обычно вам не нужно вызывать parse-timestamp напрямую, как clojure.instant экспортирует кучу функций для чтения в метках времени:

(clojure.instant/read-instant-date "2014-04-23T10:13Z") 
;= #inst "2014-04-23T10:13:00.000-00:00" 

read-instant-calendar и read-instant-timestamp являются две другими функциями этого типа. Все они построены с использованием parse-timestamp и имеют документы, документирующие их контракты.

+0

Благодарим вас за четкий ответ. – Litterate