我找到了这行 Clojure 代码:@(d/transact conn schema-tx)
. 这是一个创建数据库模式的 Datomic 语句。由于难以搜索“@”等字符,我在 Google 上找不到任何相关内容。
第一个括号之前的“at”符号是什么意思?
这是deref 宏字符。您在 Datomic 的上下文中寻找的是:
http://docs.datomic.com/transactions.html
在处理交易下:
在 Clojure 中,您还可以使用 deref 方法或 @ 来获取事务的结果。
有关Clojure 中deref的更多信息,请参阅:
这是 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”,您会通过搜索引擎找到结果。但这需要一些耐心;-)
@ 相当于 Clojure 中的 deref。交易返回一个未来,您可以将其取消以获取结果。deref/@ 将阻塞直到事务完成/中止/超时。