Что означает знак @(при знаке) в Clojure?

Я нашел эту строку кода Clojure: @(d/transact conn schema-tx). Это оператор Datomic, который создает схему базы данных. Я не мог найти что-либо релевантное для Google из-за трудностей поиска таких символов, как "@".

Что означает знак "at" перед первой скобкой?

Ответ 1

Это макрокоманда deref. То, что вы ищете в контексте Datomic, находится по адресу:

http://docs.datomic.com/transactions.html

в разделе Обработка транзакций:

В Clojure вы также можете использовать метод deref или @, чтобы получить результат транзакции.

Подробнее о deref в Clojure см. ниже:

http://clojuredocs.org/clojure_core/clojure.core/deref

Ответ 2

Вот полезный обзор синтаксиса Clojure по умолчанию и "сахара" (например, определения макросов).

http://java.ociweb.com/mark/clojure/article.html#Overview

Вы найдете объясненный знак числа #, который указывает на отображение регулярных выражений или хэшей, каретку ^, которая предназначена для метаданных, и среди многих других - знак "at sign" @. Это сахарная форма для разыменования, что означает, что вы получаете реальную ценность, на которую указывает ссылка.

Clojure имеет три ссылочных типа: Refs, Atoms и Agents.

http://clojure-doc.org/articles/language/concurrency_and_parallelism.html#clojure-reference-types

Ваш термин @(d/transact conn schema-tx), кажется, доставляет ссылку на атом, а по знаку @ вы откладываете и тем самым получаете значение, на которое указывает эта ссылка.

Кстати, вы найдете результаты с поисковыми системами, если вы посмотрите, например. для "Clojure при знаке". Но это требует некоторого терпения; -)

Ответ 3

Параметр @эквивалентен deref в Clojure. transact возвращает будущее, которое вы хотите получить. deref/@будет блокироваться до тех пор, пока транзакция не завершит/прервется/не выйдет.