Значение .
объясняется ответами Джоста и Джереми. На случай, если вам интересно узнать, что достигается этим конкретным вызовом метода:
В основном это вставляет ключ с именем :macro
со значением true
в карту метаданных Var, имя которого clojure.core/defmacro
. Результатом этого является то, что с этого момента, если компилятор встречает символ defmacro
в контексте, где он разрешается в var #'clojure.core/defmacro
(#'foo
является сокращением для (var foo)
) - который обычно будет везде хотя вы могли бы, например, замаскируйте этот Var с помощью локальной переменной let
- он будет знать, что он должен обращаться с ним соответствующим образом в случае имени макроса.
(То есть, либо (1) разверните вызов макроса, используя функцию, связанную с #'clojure.core/defmacro
, если символ defmacro
находится в позиции оператора, т. Е. Непосредственно справа от открывающей пары, либо же бросьте исключение, чтобы жаловаться на упоминание имени макроса в позиции без оператора.)
Между прочим, компилятор Clojure обычно использует такого рода карты метаданных на Vars, например, принять решение о типах различных объектов (см. :tag
метаданные) или о необходимости встроить вызов функции (IIRC, :inline
и :inline-arities
).