19

我找到了这行 Clojure 代码:@(d/transact conn schema-tx). 这是一个创建数据库模式的 Datomic 语句。由于难以搜索“@”等字符,我在 Google 上找不到任何相关内容。

第一个括号之前的“at”符号是什么意思?

4

3 回答 3

13

这是deref 宏字符。您在 Datomic 的上下文中寻找的是:

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

处理交易下:

在 Clojure 中,您还可以使用 deref 方法或 @ 来获取事务的结果。

有关Clojure 中deref的更多信息,请参阅:

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

于 2014-07-07T22:10:53.470 回答
9

这是 Clojure 默认语法和“糖”(即宏定义)的有用概述。

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

您会发现#表示正则表达式或哈希映射的数字符号^、用于元数据的插入符号以及“at 符号”等等@。它是取消引用的一种糖形式,这意味着您可以获得引用所指向的实际值。

Clojure 具有三种引用类型:Refs、Atoms 和 Agents。

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

您的术语@(d/transact conn schema-tx)似乎提供了对原子的引用,并且通过 at 符号@您延迟并因此获得该引用指向的值。

顺便说一句,如果您查找例如“Clojure at sign”,您会通过搜索引擎找到结果。但这需要一些耐心;-)

于 2014-07-07T22:13:02.553 回答
1

@ 相当于 Clojure 中的 deref。交易返回一个未来,您可以将其取消以获取结果。deref/@ 将阻塞直到事务完成/中止/超时。

于 2014-07-07T22:08:49.270 回答