2015-01-28 2 views
2

В специальных формах Clojure документации (http://clojure.org/special_forms)Clojure условия карта параметры предоставляются в качестве метаданных списка аргументов

Параметр состояния карты описан ниже:

Параметр Состояние карты может используется для указания предварительных и постусловий для функции. Она имеет следующий вид:

{: предварительно [предварительно выраж *]: запись [пост-выражение *]}

где либо ключ не является обязательным. Карта условий также может быть предоставлена ​​ в качестве метаданных arglist.

Я могу добавить условие-карту как блок к (defn [x] {: pre []: post []} ...) просто отлично, но я не совсем понимаю комментарий о будучи в состоянии предоставить карту условий как метаданные arglist.

Я очень новичок в Clojure и только начал изучать метаданные. Может ли кто-нибудь привести пример того, как это будет сделано?

Thanks,

Мэтт.

ответ

3
(defn foo ^{:pre [(even? x)] :post [(pos? %)]} [x] 
    ;;  <-- metadata attached to arglist --> \/
    ;;           | 
    ;;        arglist -----/ 
    (inc x)) 

Вызов выше РЕПЛ:

user=> (foo 0) 
1 
user=> (foo -2) 
AssertionError Assert failed: (pos? %) user/foo (NO_SOURCE_FILE:2) 
user=> (foo 1) 
AssertionError Assert failed: (even? x) user/foo (NO_SOURCE_FILE:2) 
+0

Отлично! Спасибо за это. – Sigmoidal

Смежные вопросы