2013-07-22 3 views
3

Пример кода:Что я вижу в приложении «Кольцо»?

(def app 
    (-> #'handler 
    (ring.middleware.stacktrace/wrap-stacktrace) 
    (wrap-spy))) 

Я не Clojure эксперт и это #' озадачивает меня - что это такое?

+1

Чтобы найти такие вещи, вы можете использовать [symbolhound] (http://symbolhound.com/?q=%23%27) –

+1

Это [макрос читателя] (http://clojure.org/reader# % 20Reader - Макро% 20 символов) для [var] (http://clojure.org/vars) -quote. –

+2

Это действительно близко к упомянутым дубликатам. Единственное различие заключается в том, что он спрашивает о кольце, в частности, что, вероятно, связано с тем, что многие люди впервые сталкиваются с «#». Ключевое слово (и тег) «кольца» может сделать это достойным внимания. – overthink

ответ

4

Это reader macro called var-quote. #'x - это то же самое, что и (var x).

Что она делает это дать вам ссылку на переменнуюназывается x, а не значение, на которую ссылается x. В этом случае вы говорите, чтобы позвонить: «функция вызова находится в handler», а не «здесь функция вызова». Это означает, что вы можете обновить (переопределить в repl) определение handler, и кольцо найдет его, даже если вы не обновите остальную часть приложения.